Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Restituisce il parametro di output di una stored procedure all'interno di un'altra stored procedure

Se questo non è affatto un problema con un parametro di output, ma piuttosto un set di risultati, allora supponiamo che SpWithOutputID fa qualcosa del genere (restituisce un SELECT con una sola riga e una sola colonna):

CREATE PROCEDURE dbo.SpWithOutputID
AS
BEGIN
    SET NOCOUNT ON;

    SELECT ID = 4;
END
GO

Quindi Test1 potrebbe assomigliare a questo:

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

Ma non ti sembra davvero disordinato? Dovrebbe davvero funzionare in questo modo per valori scalari singoli:

CREATE PROCEDURE dbo.SpWithOutputID
    @ID INT OUTPUT 
AS
BEGIN
    SET NOCOUNT ON;

    SELECT @ID = 4; 
END 
GO

Ora è molto più semplice consumare quello che è davvero un parametro di output ora:

CREATE PROCEDURE dbo.Test1
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @ID INT;

    EXEC dbo.SpWithOutputID @ID = @ID OUTPUT;

    SELECT @ID;
END
GO