【问题标题】:T-SQL Stored Procedure returned value into variableT-SQL 存储过程将值返回到变量中
【发布时间】:2015-06-01 10:04:53
【问题描述】:

我在 MS SQL 2012 Express 上有一个简单的存储过程,它返回的结果类似于:

DECLARE @value INT;
SELECT @value;

同时我试图调用这个存储过程来做类似的事情

DECLARE @result INT;
EXEC @result = SpFoo .....

但是,我从 SpFoo 获得的 @result 的值是 0。

如何获取存储过程返回的真实值?

谢谢

【问题讨论】:

  • 这不是 返回 值(即RETURN 语句)。这将产生一个结果集。您可以使用INSERT ... EXEC 捕获它
  • 您也可以为此使用OUTPUT 参数。
  • 最好的办法是将你的 sp 转换为函数,然后你可以简单地返回任何你想要的值。当你尝试生成结果集时,你不能在 select 中使用它。
  • 谢谢大家。我现在了解限制和可能性。

标签: sql-server stored-procedures sql-server-2012-express


【解决方案1】:

首先在你调用的sp中声明@Value作为输出参数

CREATE PROCEDURE spCallee
@Value INT Output
AS
BEGIN
    set @Value = 1

END
GO

在调用者 sp 中得到这样的结果

CREATE PROCEDURE spCaller
AS
BEGIN

    declare @Result as int = 0

    EXEC spCallee @Value = @Result Output

    Select @Result
END
GO

【讨论】:

    【解决方案2】:

    我知道的唯一方法是将结果放到表格中,然后从中获取:

    DECLARE @tmp TABLE (Result int)
    DECLARE @res int
    
    INSERT INTO @tmp
    EXECUTE [Procedure]...
    
    SELECT @res = Result
    FROM @tmp
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-07
      • 2017-03-30
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多