Está en la página 1de 12

Bases de Datos I - Clase # 10

SQL Dinámico

Profesores: Ing. Larry Catarine, Ing. Kevin Vargas.


SQL Dinámico

Hablamos de ejecución dinámica porque la sentencia SQL que va a ejecutar nuestro servidor no está
escrita en ningún procedimiento estáticamente, sino que se crea cada vez que tenemos que ejecutarla.
Frente a esta forma de trabajar tenemos el SQL “normal”, donde la sentencia SQL está previamente
escrita y compilada y lo único que hay que hacer es decidir cuando la ejecutamos.

Una sentencia SQL puede venir desde


una aplicación externa desde algún
lenguaje que permita el acceso a base
de datos y ejecución de sentencias de
forma dinámica.
EXEC

A continuación se construye una consulta T-SQL dinámica para devolver todos los registros de una tabla llamada
Empleados. Aunque por su sencillez no es del todo últil en el ejemplo propuesto; podríamos también enviar
dinámicamente los criterios para filtrar desde nuestra aplicación usando la cláusula Where, Order By, etc; de esta
manera tendríamos un solo procedimiento almacenado que mostraría los resultados según criterios seleccionados
por el usuario en la capa de presentación.

DECLARE @ConsultaSQL NVARCHAR(500)


DECLARE @Tabla NVARCHAR(25)

SET @Tabla = 'Empleados'


SET @ConsultaSQL = 'SELECT * FROM ' + @Tabla

EXEC (@ConsultaSQL)
Ejemplo de ejecución:
EXEC
Error de ejecución:
SP_EXECUTESQL
La ejecución de esta instrucción se hace mediante el comando EXEC, ya que se trata de un procedimiento pre-
compilado propio de SQL Server. En este ejemplo se dinamiza además de la consulta, los parámetros del
BETWEEN, los cuales son pasados dinámicamente a la consulta. Nótese que éstos deben definirse en el llamado
del procedimiento, o bien podrían haberse definido en una variable, y usar ésta en el llamado.

DECLARE @ConsultaSQL NVARCHAR(500)


DECLARE @Tabla NVARCHAR(25)
DECLARE @Edad1 INT
DECLARE @Edad2 INT

SET @Edad1 = 50
SET @Edad2 = 70

SET @Tabla = N'Empleados'


SET @ConsultaSQL = N'SELECT * FROM ' + @Tabla + N' WHERE Edad BETWEEN @Edad1
AND @Edad2'

--Ejecución de consulta dinámica


EXEC SP_EXECUTESQL @ConsultaSQL, N'@Edad1 INT, @Edad2 INT', @Edad1, @Edad2
SP_EXECUTESQL
Error de ejecución:
¿Para que sirven los SQL
Dinámicos?
El abanico de posibilidades al utilizar consultas
dinámicas es grande, al igual que las ventajas,
pero hay que tener mucho cuidado con las
brechas abiertas respecto a la seguridad, ya que
por ejemplo al tratarse de una aplicación web
estas consultas pueden ser interceptadas y
podríamos fácilmente ser víctimas de Inyección
SQL, por lo que lo aconsejable es usar
procedimientos almacenados con consultas
definidas siempre que se pueda.
SQL Dinámico y Stored Procedures
Ejercicios
• Crear un sql dinámico con el cual traiga el número de factura, la
cantidad de personas y la cantidad de platos (usar un join), los dos
últimos datos deben estar agrupados por nrofactura. La consulta debe
contener como parámetro los nombres de las tablas usados en el join.
• Crear un stored procedure con un sql dinámico para mostrar los
ingredientes que tienen un precio entre 20 y 40. Los parámetros para la
consulta deben ser los valores y el parámetro para la ejecución del
store debe ser la tabla.
• Crear un stored procedure con un SQL Dinámico para calcular el TOP
de la tabla platos. El parámetro del store debe ser numero de TOP
ejemplo: 5, 10, 15.
¡¡¡Gracias por acompañarnos!!!

También podría gustarte