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