Consultas Dinámicas

Creado por David Miralpeix, Modificado el Fri, 16 Feb 2024 a las 12:25 PM por David Miralpeix

 

Podemos componer sentencias SQL almacenándolas en cadenas y luego ejecutar bien con EXEC o con sp_executesql.   Se aconseja usar este último siempre, ya que permite a SQL Server reutilizar el plan de ejecución de la consulta en vez de generar uno nuevo, ahorrándonos el coste que ello conlleva.

 

DECLARE @valor int

 

EXECUTE sp_executesql N'SELECT @ret = COUNT(*) FROM Pedidos_Cli_Lineas WHERE Precio_Euro>@MinPrecio',

N'@MinPrecio int, @ret int OUTPUT',        -- definición de variables

@MinPrecio = 10,                                    -- inicializacion de variables

@ret=@valor OUTPUT                             -- retorno

 

SELECT @valor 

 

Ejemplo consulta dinámica para sacar coste de articulo:

 

Declare @IdArticulo T_Id_Articulo='GAT004'

Declare @IdAlmacen T_Id_Almacen=5

Declare @CampoCoste varchar(100)='CosteMedio_EURO'

Declare @coste T_Decimal

 

Declare @lsql nvarchar(1000)                                                                  

SET @lsql='SELECT @ret='  + @CampoCoste + ' FROM Articulos_Datos_Ultimos_Alm WHERE IdArticulo=''' + @IdArticulo+ '''  AND IdAlmacen=' + convert(varchar,@IdAlmacen)                                                                  

EXECUTE sp_executesql @lsql,N'@ret T_Decimal OUTPUT',@ret=@coste output                         

 

SELECT @coste

 

Con la siguiente consulta dinámica podemos saber el coste de un determinado artículo en un determinado almacén y tomando un campo en concreto (pasado por parámetro) de la tabla Articulos_Datos_Ultimos_Alm

<< Artículo anterior                                                                                                                                       Siguiente artículo >>

¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo