在SQL Server 2014中,我试图创建一个动态的WHERE子句。
我已将查询构建为字符串,但是当我尝试使用sp_executesql执行查询时,出现以下错误:提示 13您必须声明标量变量“ @desde”。
我不知道如何使sp_executesql识别输入参数。
ALTER PROCEDURE [dbo].[seleccionarFacturas] -- Add the parameters for the stored procedure here @desde char(8) = null, @hasta char(8) = null, @minimo int = null, @ciudad int = null AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @tiendas varchar(max); DECLARE @tablaFacturas TABLE ( fecha char(8), CO char(8), consecutivo varchar(max), nombreCliente varchar(max), ventaTotal int ); SET @tiendas='(ID_CO=20 OR ID_CO=22 OR ID_CO=23 OR ID_CO=27 OR ID_CO=35 OR ID_CO=39 OR ID_CO=45 OR ID_CO=48 OR ID_CO=55 OR ID_CO=58)'; DECLARE @dynamicCode nvarchar(max)= N' SELECT FECHA_DCTO, ID_CO, DETALLE_DOC, NOM_CLI_CONTADO, (SUM(TOT_VENTA)) AS ventaTotal FROM moda.dbo.CMMOVIMIENTO_VENTAS WHERE' + @tiendas + N' AND FECHA_DCTO >= @desde AND FECHA_DCTO <= @hasta GROUP BY DETALLE_DOC, ID_CO, FECHA_DCTO, NOM_CLI_CONTADO'; INSERT INTO @tablaFacturas EXEC [dbo].[sp_executesql] @dynamicCode; SELECT * FROM @tablaFacturas
代替
EXEC [dbo].[sp_executesql] @dynamicCode;
使用
EXECUTE sp_executesql @dynamicCode, N'@desde char(8), @hasta char(8)', @desde = @desde, @hasta = @hasta;
您必须定义在动态查询中使用的参数,例如@desde and @hasta
@desde and @hasta
请参考sp_executesql
否则,您可以@desde, @hasta将动态查询的值连接起来,例如
@desde, @hasta
'....FECHA_DCTO >= ' + @desde + 'AND FECHA_DCTO <= ' + @hasta + 'GROUP BY ....'