Использование результатов вложенных хранимых процедур при вызове хранимой процедуры Sql Server 2008 - PullRequest
6 голосов
/ 03 февраля 2011

Можно ли использовать результаты одной хранимой процедуры в другой хранимой процедуре?

* 1003 Т.е. *

CREATE PROCEDURE [dbo].[Proc1]
        @ID INT,
        @mfgID INT,
        @DealerID INT

AS
BEGIN

    DECLARE @Proc1Result UserDefinedTableVariable

    EXEC @Proc1Result = Proc2
        @SomeID = @ID,
        @SomeID2 = @mfgID,
        @SomeID3 = @DealerID

    -- Now I want to use the table returned by the stored procedure here.
    SELECT [col1],[col2] FROM @Proc1Result

END

Я пытался использовать INSERT INTO @Proc1Result EXEC Proc2 (with parameters passed), но INSERT EXEC нельзя вызвать во вложенном операторе.

Есть ли способ сделать это? Среда - SQL Server 2008.

Ответы [ 3 ]

10 голосов
/ 03 февраля 2011

Вы можете вкладывать хранимые процедуры до 32 уровней .

Я бы порекомендовал прочитать более эту статью относительно INSERT-EXEC. Вот фрагмент:

Если some_sp пытается вызвать some_other_sp с INSERT-EXEC вы получите сообщение об ошибке. Таким образом, вы можете иметь только один INSERT-EXEC, активный одновременно. это такое ограничение в SQL Server.

5 голосов
/ 03 февраля 2011

Ты прав, INSERT ... EXEC не может гнездиться. От Как обмениваться данными между хранимыми процедурами .

Это не может быть гнездом. Если some_sp попытается позвоните some_other_sp с помощью INSERT-EXEC, вы получите сообщение об ошибке. Таким образом, Вы можете иметь только один INSERT-EXEC активный одновременно. Это ограничение в SQL Server.

Тебе нужно найти другой способ. Ссылка на статью Эрланда описывает все возможные варианты и подробно их обсуждает.

1 голос
/ 03 февраля 2011

Один синтаксис для получения результатов в одном sp от другого:

INSERT INTO [myTable]
EXEC Proc1 [param1], [param2], [param3], etc.

Но сначала нужно создать таблицу, в которую она будет вставлена, а имена и типы полей должны точно совпадать.

...