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:
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:
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
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:
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:
¿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:
Gracias por tu Visita.
Mis Mejores Saludos
Xavier García
No hay comentarios:
Publicar un comentario