【问题标题】:Set a SP return value to a variable in SQL Server将 SP 返回值设置为 SQL Server 中的变量
【发布时间】:2025-12-27 15:05:06
【问题描述】:

我有一个存储过程,它返回带有文本的单行和一列,我需要将此文本设置为一个变量,例如:

declare @bla varchar(100)
select @bla = sp_Name 9999, 99989999, 'A', 'S', null

当然,这段代码不起作用...

谢谢!

【问题讨论】:

    标签: sql-server stored-procedures


    【解决方案1】:

    如果您无法更改存储过程,另一种解决方案是定义一个临时表,并将结果插入其中

    DECLARE @Output VARCHAR(100)
    
    CREATE TABLE #tmpTable
    (
        OutputValue VARCHAR(100)
    )
    INSERT INTO #tmpTable (OutputValue)
    EXEC dbo.sp_name 9999, 99989999, 'A', 'S', null
    
    SELECT
        @Output = OutputValue
    FROM 
        #tmpTable
    
    DROP TABLE #tmpTable
    

    【讨论】:

    • 将其设置为您自己的具有更多价值的存储过程会非常方便(如果您有权限)。您可能会想要多次调用它。
    • 这在 T-SQL SQL2005 中似乎对我不起作用。我的 sp 返回一个 int。我创建了临时表,没有语法错误并且它运行,但是临时表中的 int 没有值。 DiGi [ on this page ] 提供的解决方案确实对我有用。谢谢
    • 最好使用表变量而不是临时表,以避免性能问题、锁定并且不需要特殊权限。
    【解决方案2】:

    如果存储过程返回单个值,您可以将存储过程上的参数之一定义为 OUTPUT 变量,然后存储过程将设置参数的值

    CREATE PROCEDURE dbo.sp_Name
        @In INT,
        @Out VARCHAR(100) OUTPUT
    
    AS
    BEGIN
        SELECT @Out = 'Test'
    END
    GO
    

    然后,你得到如下输出值

    DECLARE @OUT VARCHAR(100)
    EXEC sp_name 1, @Out OUTPUT
    PRINT @Out
    

    【讨论】:

      【解决方案3】:
      DECLARE
        @out INT
      
      EXEC @out = sp_name 'param', 2, ...
      

      T-SQL "EXECUTE" help 中的更多信息(帮助来自 MSSQL 2008,但这也适用于 2000)

      【讨论】:

      • 这仅适用于具有 OUT 参数的过程。当过程返回一个标量值时不是(原始问题就是这种情况)。
      • 至少在 2012 年不可用,2008 年未测试
      最近更新 更多