Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renvoyer le paramètre de sortie d'une procédure stockée dans une autre procédure stockée

S'il ne s'agit pas vraiment d'un problème de paramètre de sortie, mais plutôt d'un ensemble de résultats, alors devinez que SpWithOutputID fait quelque chose comme ça (renvoie un SELECT avec une seule ligne et une seule colonne) :

CREATE PROCEDURE dbo.SpWithOutputID
AS
BEGIN
    SET NOCOUNT ON;

    SELECT ID = 4;
END
GO

Puis Test1 pourrait ressembler à ceci :

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

Mais cela ne vous semble-t-il pas vraiment désordonné ? Cela devrait vraiment fonctionner de cette façon pour les valeurs scalaires uniques :

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

    SELECT @ID = 4; 
END 
GO

Désormais, il est beaucoup plus simple de consommer ce qui est réellement un paramètre de sortie :

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

    EXEC dbo.SpWithOutputID @ID = @ID OUTPUT;

    SELECT @ID;
END
GO