sql >> Base de Datos >  >> RDS >> Sqlserver

Devuelve el parámetro de salida de un procedimiento almacenado dentro de otro procedimiento almacenado

Si esto no es realmente un problema de parámetro de salida, sino más bien un conjunto de resultados, entonces suponga que SpWithOutputID hace algo como esto (devuelve un SELECT con una sola fila y una sola columna):

CREATE PROCEDURE dbo.SpWithOutputID
AS
BEGIN
    SET NOCOUNT ON;

    SELECT ID = 4;
END
GO

Entonces Test1 podría verse así:

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

¿Pero no te parece eso realmente desordenado? Realmente debería funcionar de esta manera para valores escalares únicos:

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

    SELECT @ID = 4; 
END 
GO

Ahora es mucho más sencillo consumir lo que realmente es un parámetro de salida ahora:

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

    EXEC dbo.SpWithOutputID @ID = @ID OUTPUT;

    SELECT @ID;
END
GO