从存储过程中的SELECT语句中获取标量值

Jer*_*ose 3 sql sql-server stored-procedures

我知道从存储过程返回标量值的首选方法是使用RETURNOUTPUT参数.但是,假设我有一个存储过程,它使用select语句返回值:

CREATE PROC spReturnNumber AS

SELECT 1
Run Code Online (Sandbox Code Playgroud)

是否有可能从另一个存储过程中获取此值?

CREATE PROC spCheckNumber AS

EXEC spReturnNumber -- <-- get the return value here?
Run Code Online (Sandbox Code Playgroud)

澄清:我需要一个不需要使用OUTPUT参数或使用RETURN返回值的解决方案.

提前致谢.

And*_*mar 7

您可以使用insert-exec将存储过程的结果存储在表中:

declare @t table (col1 int)
insert @t exec spReturnNumber
return (select col1 from @t)
Run Code Online (Sandbox Code Playgroud)

表的定义必须与存储过程的结果集匹配.


Aar*_*and 6

使用OUTPUT参数代替(或补充,如果其他应用程序使用此过程)SELECT.

ALTER PROCEDURE dbo.spReturnNumber
    @Number INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    SET @Number = 1;
    SELECT @Number;
END
GO

CREATE PROCEDURE dbo.spCheckNumber
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @Number INT;
    EXEC dbo.spReturnNumber @Number = @Number;
    SELECT @Number;
END
GO
Run Code Online (Sandbox Code Playgroud)

如果您无法更改原始过程,但您知道其输出将保持静态,则可以使用#temp 表。

CREATE PROCEDURE dbo.spCheckNumber
AS
BEGIN
    SET NOCOUNT ON;

    CREATE TABLE #n(i INT);
    INSERT #n(i) EXEC dbo.spReturnNumber;

    DECLARE @Number INT;
    SELECT @Number = i FROM #n;
END
GO
Run Code Online (Sandbox Code Playgroud)