Jeśli tak naprawdę nie jest to w ogóle problem z parametrem wyjściowym, ale raczej zestaw wyników, zgadnij, że SpWithOutputID
robi coś takiego (zwraca SELECT
z jednym wierszem i jedną kolumną):
CREATE PROCEDURE dbo.SpWithOutputID
AS
BEGIN
SET NOCOUNT ON;
SELECT ID = 4;
END
GO
Następnie Test1
może wyglądać tak:
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
Ale czy nie wygląda to na naprawdę bałaganiarski? To naprawdę powinno działać w ten sposób dla pojedynczych wartości skalarnych:
CREATE PROCEDURE dbo.SpWithOutputID
@ID INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ID = 4;
END
GO
Teraz znacznie łatwiej jest wykorzystać to, co jest naprawdę parametrem wyjściowym:
CREATE PROCEDURE dbo.Test1
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ID INT;
EXEC dbo.SpWithOutputID @ID = @ID OUTPUT;
SELECT @ID;
END
GO