SQL Advanced Knowledge V2-SQL dinámico

Columna SQL

Resumen de conocimientos básicos de la base de datos SQL

Resumen del conocimiento avanzado de la base de datos SQL

Antes de introducir SQL dinámico, echemos un vistazo a lo que es SQL estático

SQL estático

Las sentencias de SQL estático se utilizan generalmente en aplicaciones de SQL incorporado. Antes de que se ejecute el programa, deben determinarse las sentencias de SQL. Por ejemplo, deben existir los nombres de columna y de tabla implicados en las sentencias de SQL. La compilación de sentencias SQL estáticas se realiza antes de que se ejecute la aplicación y los resultados de la compilación se almacenan en la base de datos. Luego, cuando el programa se esté ejecutando, la base de datos ejecutará directamente la declaración SQL compilada, reduciendo la sobrecarga del tiempo de ejecución.

SQL dinámico

Las sentencias SQL dinámicas se compilan y ejecutan cuando la aplicación se está ejecutando. Por ejemplo, cuando se utiliza la herramienta interactiva CLP de DB2 para acceder a la base de datos, la sentencia SQL introducida por el usuario es incierta, por lo que la sentencia SQL solo se puede compilar dinámicamente. Hay muchas aplicaciones de SQL dinámico. Las aplicaciones CLI y JDBC comunes utilizan SQL dinámico.

Función de SQL dinámico

  • Automatizar las tareas de gestión. Por ejemplo: Para cada base de datos en la instancia de la base de datos, consulte sus metadatos y ejecute la instrucción BACKUP DATABASE para ella.

  • Mejorar el desempeño de tareas específicas. Por ejemplo, cree consultas específicas parametrizadas para reutilizar planes de ejecución previamente almacenados en caché.

  • Sobre la base de la consulta de datos real, se construye el elemento de código. Por ejemplo, cuando no se sabe de antemano qué elementos deben aparecer en la cláusula IN del operador PIVOT, se construye dinámicamente una consulta PIVOT.

Método de ejecución de SQL dinámico

Use el comando EXEC (abreviatura de EXECUTE) y use SP_EXECUTERSQL.

Ejecución del comando EXEC

gramática

EXECUTE (instrucción SQL)

Nota: El comando EXECUTE tiene dos propósitos, uno es ejecutar un procedimiento almacenado y el otro es ejecutar SQL dinámico


Ejemplo sin parámetros

Una cadena se almacena en la variable @SQL, la cadena contiene una declaración de consulta, y luego el código de lote almacenado en la variable se llama con EXEC, podemos escribir SQL así:


EXEC ('SELECT * FROM Customers')

Los resultados son los siguientes:

SQL Advanced Knowledge V2-SQL dinámico

Es lo mismo que ejecutamos directamente SELECT * FROM Clientes.

Ejemplo con parámetros

Siendo el ejemplo anterior, cambiemos la redacción

DECLARE @SQL AS VARCHAR(100);
DECLARE @Column AS VARCHAR(20);
SET @Column = '姓名'
SET @SQL = 'SELECT ' + @Column + '  FROM Customers';
EXEC (@SQL)

Los resultados son los siguientes:

SQL Advanced Knowledge V2-SQL dinámico

Ejecución SP_EXECUTERSQL
sintaxis

EXEC SP_EXECUTERSQL parámetro 1, parámetro 2, parámetro 3

Nota: SP_EXECUTERSQL es otra forma de ejecutar SQL dinámico después de EXEC. El uso de este procedimiento almacenado es más seguro y flexible porque admite parámetros de entrada y salida. Tenga en cuenta que, a diferencia de EXEC, SP_EXECUTERSQL solo admite códigos de lote que utilizan cadenas Unicode como entrada.

Ejemplo

Construyó un código de lote para consultar la tabla Clientes, usando un parámetro de entrada @CusID en sus condiciones de filtro de consulta


DECLARE @SQL AS NVARCHAR(100);
SET @SQL=N'SELECT * FROM Customers
WHERE 客户ID=@CusID;';

EXEC  SP_EXECUTESQL
    @STMT=@SQL,
    @PARMS=N'@CusID AS INT',
    @CusID=1;

Los resultados son los siguientes:

SQL Advanced Knowledge V2-SQL dinámico

El código especifica el valor del parámetro de entrada como 1, pero incluso si el código se ejecuta con un valor diferente, la cadena de código sigue siendo la misma. Esto puede aumentar la posibilidad de reutilizar planes de ejecución previamente almacenados en caché.

anotación

El SQL dinámico puede estar menos expuesto en el trabajo diario, pero su función es muy poderosa. Se puede anidar directamente en el código para manipular datos, pero también es propenso a errores, especialmente cuando se tiene mucho cuidado al empalmar comandos. Aquí es solo para darle una breve introducción a su uso, necesita un uso profundo y mucha investigación.

Supongo que te gusta

Origin blog.51cto.com/15057820/2655104
Recomendado
Clasificación