【问题标题】:How to handle a stored procedure with Input and Output parameter in a cursor?如何在游标中处理带有输入和输出参数的存储过程?
【发布时间】:2017-01-29 11:17:53
【问题描述】:

我有一个 stored procedure,其中包含一个查询,该查询为我提供了一个值作为员工 ID (input) 的 varchar (output)。

我的光标包含一个员工 ID 列表,我想循环存储过程并打印每个员工 ID 的值。

这是我迄今为止尝试过的:

DECLARE @MyCursor as CURSOR
DECLARE @InputPar as int
DECLARE @OutputPar as varchar(30)

SET @MyCursor = CURSOR FOR <query>

Open @MyCursor;
FETCH NEXT FROM @MyCursor INTO @InputPar

BEGIN
WHILE @@FETCH_STATUS = 0
Exec dbo.mySP @InputPar, @OutputPar Output
Print @OutputPar
FETCH NEXT FROM @MyCursor INTO @InputPar
END
CLOSE @MyCursor;
DEALLOCATE @MyCursor;

我目前得到的错误是Must declare the scalar variable "@QutputPar". 上面声明了变量,所以我看不出问题出在哪里。谁能帮我运行我的代码?

【问题讨论】:

    标签: sql tsql stored-procedures cursor


    【解决方案1】:

    您通过光标进行操作的原因尚不清楚,它可以用基于集合的操作替换(99% 的时间)。您没有获得值的原因是您没有正确读取输出值..

    下面是方法

       Declare @var int/varchar--delcare datatype as per u r need
        Exec dbo.mySP @InputPar, @var Output
    
        Print @var
    

    【讨论】:

    • 你能告诉我@b 是什么吗?
    • 这是你的参数,你也可以只使用@var
    • 对不起,但我看不出我的行有什么不同:Exec dbo.mySP '@InputPar', '@OutputPar' 输出。但也许我是盲人。
    • 你应该先声明输出变量
    • 这是在哪里声明的Qutput_Strings
    【解决方案2】:
    DECLARE @InputPar as int
    DECLARE @OutputPar as varchar(30)
    declare MyCursor cursor for <your query here>
    Open MyCursor;
    FETCH NEXT FROM MyCursor INTO @InputPar
    
    Exec dbo.mySP @InputPar, @OutputPar Output
    Print @OutputPar
    
    CLOSE MyCursor;
    DEALLOCATE MyCursor;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-12
      • 2013-01-11
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多