Ако това всъщност изобщо не е проблем с изходен параметър, а по-скоро набор от резултати, тогава се предполага, че SpWithOutputID
прави нещо подобно (връща SELECT
с един ред и една колона):
CREATE PROCEDURE dbo.SpWithOutputID
AS
BEGIN
SET NOCOUNT ON;
SELECT ID = 4;
END
GO
След това Test1
може да изглежда така:
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
Но това не ви ли изглежда наистина объркано? Наистина трябва да работи по този начин за единични, скаларни стойности:
CREATE PROCEDURE dbo.SpWithOutputID
@ID INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ID = 4;
END
GO
Сега е много по-лесно да се използва това, което наистина е изходен параметър сега:
CREATE PROCEDURE dbo.Test1
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ID INT;
EXEC dbo.SpWithOutputID @ID = @ID OUTPUT;
SELECT @ID;
END
GO