Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Return Output Param de um Stored Procedure dentro de outro Stored Procedure


Se isso não for realmente um problema de parâmetro de saída, mas sim um conjunto de resultados, suponha que SpWithOutputID faz algo assim (retorna um SELECT com uma única linha e uma única coluna):
CREATE PROCEDURE dbo.SpWithOutputID
AS
BEGIN
    SET NOCOUNT ON;

    SELECT ID = 4;
END
GO

Em seguida, Test1 poderia ficar assim:
CREATE PROCEDURE dbo.Test1
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @ID INT;

    CREATE TABLE #x(ID INT);

    INSERT #x EXEC dbo.SpWithOutputID;

    SELECT TOP (1) @ID = ID FROM #x;

    DROP TABLE #x;
END
GO

Mas isso não parece muito confuso para você? Ele realmente deve funcionar dessa maneira para valores escalares únicos:
CREATE PROCEDURE dbo.SpWithOutputID
    @ID INT OUTPUT 
AS
BEGIN
    SET NOCOUNT ON;

    SELECT @ID = 4; 
END 
GO

Agora é muito mais simples consumir o que é realmente um parâmetro de saída agora:
CREATE PROCEDURE dbo.Test1
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @ID INT;

    EXEC dbo.SpWithOutputID @ID = @ID OUTPUT;

    SELECT @ID;
END
GO