【问题标题】:How to pass multiple values in place of single value to a stored procedure如何将多个值代替单个值传递给存储过程
【发布时间】:2013-12-19 05:07:10
【问题描述】:

我有一个存储过程,它在我使用时完美执行:

exec spSampleAmount 12212,0 

现在我需要像“12212,12213,12214,12215”一样传递这些值,这些值来自另一个查询。如何将此查询结果传递给 2 参数存储过程。

exec spSampleAmount param1,param2;

param1 有一组值。

【问题讨论】:

  • 如果存储过程带两个参数,则不能多传(除非有可选参数)。重写存储过程。
  • 重写拆分“12212,12213,12214,12215”的spSampleAmount并使用它。所以您还需要将“12212,12213,12214,12215”的字符串拆分函数并返回表。或者不要修改 spSampleAmount 而不是在 proc 中循环,在其中调用它并拆分参数并逐个传递。球现在在你的球场上。

标签: sql sql-server stored-procedures parameters execute


【解决方案1】:

将第一个查询的输出存储在参数中。首先声明参数,然后将第一个查询的值赋给该参数,然后调用exec命令执行存储过程。

DECLARE @V_Param1 VARCHAR(1000);

SELECT @V_Param1 = Rest of query

EXEC spSampleAmount @V_Param1, 0

【讨论】:

  • @shah 感谢您的回答 SELECT ID FROM Header WHERE Date BETWEEN '10-1-2013' AND '11-1-2013' 上面的查询返回 12 行,所以会出现这样的错误“子查询返回的值超过 1 个。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。"
  • @SubbaraoGaddam 请添加完整代码,以便我理解并给你答案
  • 我需要在执行时将多个值传递给 SP 的 param1..
  • 我无权编辑 SP,因为它也用于其他地方。所以我只需要在执行级别上做这件事
【解决方案2】:

如果它被 SSRS 调用它是可能的,我不知道它是如何工作的,但它是。

您有两种方法可以从 ssrs 调用存储过程,sql 查询和写入执行。或者选择执行存储过程。

通过这种方式,您可以将多项选择组合框中的选择传递给存储过程,并在您的存储过程中执行 : where myparam in (@paramreceived)。

.Net 中应该也可以。

我尝试在 tsql 中做到这一点,但从未成功,所以如果有解决该问题的方法,我也很感兴趣

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多