CONSULTAS DINAMICAS EN SQL SERVER

COMO REALIZAR CONSULTAS DINAMICAS EN SQL SERVER

Una de las Más grandes utilidades de lenguaje de base de datos SQL Server consiste en las consultas dinámicas.

¿Qué es una consulta dinámica en SQL SERVER?
Una consulta dinámica es aquella que puede irse armando o formando según la necesidad de la información a extraer, en donde puede variar absolutamente todo; los campos de la parte del select, la condicionante en la parte del where, el ordenamiento en la parte del order by en fin, es una consulta 100% dinámica.

Ejemplos de Consulta Dinámica en SQL SERVER

Vamos a lo que nos interesa, como armar o cómo utilizar esta excelente opción de SQL SERVER.

Primero tenemos que declarar Una Variables de tipo NVarchar de longitud 4000, hasta el momento esta es la máxima longitud que se permite en una variable que se ocupará para realizar una consulta dinámica.

DECLARE @QUERY AS NVARCHAR(4000)
SET @QUERY = ''

Después iremos armando a necesidad la consulta, por ejemplo, traer los operadores que tengan más de 2 hijos

DECLARE @QUERY AS NVARCHAR(4000)
SET @QUERY = ''

SET @QUERY = @QUERY +  ' SELECT * '
SET @QUERY = @QUERY +  ' FROM EMPLEADOS AS EMP  '
SET @QUERY = @QUERY +  ' INNER JOIN CANTIDAD_HIJOS AS CH ON '
SET @QUERY = @QUERY +  ' EMP.ID_EMPLEADO = CH.ID_EMPLEADO '
SET @QUERY = @QUERY +  ' WHERE CH.HIJOS > 2 '

EXEC SP_EXECUTESQL @QUERY

El resultado será el siguiente:
Consultas Dinámicas en SQL SERVER


Ahora, vamos a cambiar la condicionante de cantidad de hijos para pasarlo como un parámetro y para que no quede fijo en la consulta, para ello declaramos la variable que utilizamos como parámetro:

DECLARE @QUERY AS NVARCHAR(4000)
DECLARE @HIJOS AS INT -- declaramos la variable
SET @QUERY = '' 

SET @HIJOS = 2 -- le ponemos un valor a la variable

SET @QUERY = @QUERY +  ' SELECT * '
SET @QUERY = @QUERY +  ' FROM EMPLEADOS AS EMP  '
SET @QUERY = @QUERY +  ' INNER JOIN CANTIDAD_HIJOS AS CH ON '
SET @QUERY = @QUERY +  ' EMP.ID_EMPLEADO = CH.ID_EMPLEADO '
SET @QUERY = @QUERY +  ' WHERE CH.HIJOS > @HIJOS ' -- ponemos la variable dentro del query dinámico

EXEC SP_EXECUTESQL @QUERY , N'@HIJOS AS INT', @HIJOS -- de esta manera pasamos el parámetro a la consulta dinámica

esto nos proporcionará el mismo resultado de arriba:

Consultas dinámicas en SQL Server imagen 2

¿Cómo podemos pasar más de un parámetro a una consulta dinámica?

Seguramente nos veremos en la necesidad de pasar más de un parámetro a la consulta dinámica, no  hay mucho problema, solo debemos declararla al inicio y después anexarla en la ejecución de la consulta, es decir, en la parte del EXEC SP_EXECUTESQL

Ejemplo:
Digamos que ahora requerimos obtener el empleado que tenga más de 1 hijo y que se llame JUAN

DECLARE @QUERY AS NVARCHAR(4000)
DECLARE @HIJOS AS INT
DECLARE @NOMBRE AS VARCHAR(50) -- Declaramos el Segundo parámetro
SET @QUERY = ''

SET @HIJOS = 1
SET @NOMBRE = 'JUAN' -- Le Asignamos un Valor

SET @QUERY = @QUERY +  ' SELECT * '
SET @QUERY = @QUERY +  ' FROM EMPLEADOS AS EMP  '
SET @QUERY = @QUERY +  ' INNER JOIN CANTIDAD_HIJOS AS CH ON '
SET @QUERY = @QUERY +  ' EMP.ID_EMPLEADO = CH.ID_EMPLEADO '
SET @QUERY = @QUERY +  ' WHERE  CH.HIJOS > @HIJOS  AND '
SET @QUERY = @QUERY +  ' EMP.NOMBRE = @NOMBRE   ' -- Lo ponemos dentro de la conslta dinámica

EXEC SP_EXECUTESQL @QUERY , N'@HIJOS AS INT, @NOMBRE AS VARCHAR(50) ', @HIJOS, @NOMBRE -- Lo Anexamos dentro de la parte de Ejecución

Resultado:
Pasando más de un Parámetro a una consulta Dinámica

Ten en cuenta que puedes cambiar cualquier parte de una consulta dinámica en base a tus necesidades.

Gracias por tu Visita.
Mis Mejores Saludos
Xavier García

No hay comentarios:

Publicar un comentario