如何将输入参数传递给 sp_executesql?
How do I pass input parameters to sp_executesql?
在 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
Else 您可以将 @desde, @hasta
的值连接到动态查询,
喜欢
'....FECHA_DCTO >= ' + @desde +
'AND FECHA_DCTO <= ' + @hasta +
'GROUP BY ....'
在 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
Else 您可以将 @desde, @hasta
的值连接到动态查询,
喜欢
'....FECHA_DCTO >= ' + @desde +
'AND FECHA_DCTO <= ' + @hasta +
'GROUP BY ....'