当前位置: 首页 > 面试题库 >

如何将输入参数传递给sp_executesql?

易雅畅
2023-03-14
问题内容

在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

请参考sp_executesql

否则,您可以@desde, @hasta将动态查询的值连接起来,例如

'....FECHA_DCTO >= ' + @desde +
'AND FECHA_DCTO <= ' + @hasta +
'GROUP BY ....'


 类似资料:
  • 我有一个输入,当按“回车键”调用一个函数来重新加载列出的项目时,我需要。为此,我正在使用 当在loadItems调用中使用常量值时,这种方法效果很好,但只要我想传递输入值,就会出现一个错误: 这就是我得到的

  • 问题内容: 我正在A中使用RUN指令安装rpm 但是,我想将值“ 2.3”作为参数传递。我的RUN指令应类似于: 哪里 问题答案: 您正在寻找和指导。这些是Docker 1.9中的新功能。查看https://docs.docker.com/engine/reference/builder/#arg。这将允许您添加到,然后使用构建。

  • 问题内容: 我想将登录用户单击的sa 列表中的传递给twitter bootstrap 。我正在与 angularjs* 一起使用 grails ,其中数据是通过 angularjs 呈现的。 *** 组态 我的grails视图页面是 我的是 所以,我怎么能传递到? 问题答案: 我尝试如下。 我在 鼓励 按钮上打电话给angularjs控制器, 我设置的从angularjs控制器。 我提供了一个p

  • 问题内容: 这似乎是一个愚蠢的问题,但是我是这个话题的新手。我正在致力于关于节点js的承诺。我想将参数传递给Promise函数。但是我不知道。 而功能类似于 问题答案: 将Promise包裹在一个函数中,否则它将立即开始工作。另外,您可以将参数传递给函数: 然后,使用它: ES6: 用:

  • 问题内容: 我在数组中呈现对象输入元素的集合。 这使我可以编写onChange处理函数: 但是在此处理程序中,我需要更改的范围对象的ID。因此,我可以更改更改在渲染函数中创建输入元素的方式并更改: 现在,我的处理程序将接收range.id作为参数,但是现在我没有newName值。我可以使用裁判获得它 这是我知道的唯一解决方案,但我怀疑有更好的解决方案。 问题答案: 该参数还通过了,但参数前置到参数

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对