Возвращение выходного параметра хранимой процедуры внутри другой хранимой процедуры - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь выяснить, как вернуть выходной параметр хранимой процедуры при выполнении хранимой процедуры внутри другой хранимой процедуры:

 CREATE PROCEDURE Test1

 EXEC SpWithOutputID -- Outputs @ID

 SELECT @ID as ID -- Output @ID now being used in this SP

Это, конечно, не мой код, а простоНапример, возможно ли это сделать?

Пример 2: --Here @ID возвращает Null

 CREATE PROCEDURE Test1
 As 
 DECLARE @ID int

 EXEC SpWithOutputID @ID = @ID OUTPUT -- Outputs @ID

 SELECT @ID as ID -- Output @ID now being used in this SP

Пример 3: --Here @ID возвращает Int

 CREATE PROCEDURE Test1
 As 

 EXEC SpWithOutputID -- Outputs @ID

1 Ответ

3 голосов
/ 15 февраля 2012

Если это вообще не проблема с выходным параметром, а скорее набор результатов, тогда предположим, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...