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 >>