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