Otras respuestas han definido lo SQL dinámico es, pero yo no vi ninguna otras respuestas que intentaron describir qué que a veces hay que usarla. (Mi experiencia es SQL Server, pero creo que otros productos son generalmente similares a este respecto.)
SQL dinámico es útil cuando reemplaza partes de una consulta que no se pueden reemplazar utilizando otros métodos.
Por ejemplo, cada vez que se llama a una consulta como:
SELECT OrderID, OrderDate, TotalPrice FROM Orders WHERE CustomerID = ??
se le pasa en un valor diferente para CustomerID. Este es el caso más simple, y uno que puede ser resuelto mediante una consulta parametrizada, o un procedimiento almacenado que acepta un parámetro, etc.
En términos generales, SQL dinámico se debe evitar en favor de las consultas con parámetros, para un rendimiento y razones de seguridad (Aunque la diferencia de rendimiento probablemente varía bastante entre los proveedores, y quizás incluso entre las versiones del producto, o incluso la configuración del servidor).
Otras búsquedas son posible hacer uso de parámetros, pero podrían ser más simple SQL como dinámica:
SELECT OrderID, OrderDate, TotalPrice FROM Orders
WHERE CustomerID IN (??,??,??)
Si siempre tuviste 3 valores, esto es tan fácil como la primera. Pero, ¿y si esta es una lista de longitud variable? Es posible hacer con los parámetros, pero puede ser muy difícil.¿Qué tal:
SELECT OrderID, OrderDate, TotalPrice FROM Orders WHERE CustomerID = ??
ORDER BY ??
Esto no puede ser sustituido directamente, puede hacerlo con una declaración complicada CASO enorme en el ORDER BY enumerando explícitamente todos los campos posibles, que pueden o no ser prácticos, dependiendo del número de de campos disponibles para ordenar por.
Por último, algunas consultas simplemente NO PUEDEN hacerse con ningún otro método.
Digamos que usted tiene un montón de tablas Pedidos (no diciendo que esto es un gran diseño), pero es posible que se encuentre con la esperanza de que usted puede hacer algo como:
SELECT OrderID, OrderDate, TotalPrice FROM ?? WHERE CustomerID = ??
Esto no se puede hacer utilizando cualquier otros metodos. En mi entorno, me encuentro con frecuencia preguntas como:
SELECT (programatically built list of fields)
FROM table1 INNER JOIN table2
(Optional INNER JOIN to table3)
WHERE (condition1)
AND (long list of other optional WHERE clauses)
Una vez más, no diciendo que esto es necesariamente gran diseño, pero SQL dinámico es más o menos necesario para este tipo de consultas.
Espero que esto ayude.
Hubiera sido bueno publicar el enlace a la pregunta a la que se refiere: http://stackoverflow.com/q/4164808/288773 – oezi
Duplicado: * [¿Qué es una consulta SQL dinámica, y cuándo podría querer? para usar uno?] (http://stackoverflow.com/questions/2190016) *. –
Posible duplicado de [¿Qué es una consulta SQL dinámica, y cuándo querría usar una?] (Http://stackoverflow.com/questions/2190016/what-is-a-dynamic-sql-query-and-when -would-you-want-to-use-one) –