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