Оператор слияния SQL, использующий хранимую процедуру в качестве источника - PullRequest
4 голосов
/ 13 мая 2011

Я хочу сделать что-то подобное, но оно не компилируется. Мой сохраненный процесс возвращает таблицу. Вот что я пытаюсь сделать - возможно, кто-то может указать на то, что я делаю неправильно, поскольку это не компилируется:

MERGE table AS target
   USING (EXEC [dbo].[sp_Something] @Rundate = '5/13/2011', @SPID = 56) 
      AS source (<Columns Returned By Stored Proc Go Here>)
ON TARGET.ID = SOURCE.ID 
WHEN MATCHED THEN
    UPDATE SET Field = Value...
WHEN NOT MATCHED THEN
    INSERT ( Field )
         VALUES (Value);

Ответы [ 3 ]

6 голосов
/ 13 мая 2011

Хранимая процедура не может использоваться там, где ожидаются таблицы.Вы должны либо использовать табличную переменную, подзапрос или табличную функцию.Например (не уверен, что это действительно так, я никогда не использовал MERGE раньше):

DECLARE @Something TABLE (columns go here...)

INSERT @Something
EXEC [dbo].[sp_Something] @Rundate = '5/13/2011', $SPID = 56

MERGE table as target
    USING @Something
       AS Source ...
3 голосов
/ 13 мая 2011

Можно только до INSERT ... EXEC.Обходной путь заключается в том, чтобы спулировать в таблицу #temp или переменную @table и использовать ее для MERGE.

0 голосов
/ 13 мая 2011

Иногда я создаю функции или представления, которые возвращают то, что должен делать sproc, а затем пишу sproc, чтобы просто вызвать представление / функцию.Таким образом, я инкапсулирую логику, могу использовать запрос в соединениях и использовать функции sproc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...