SQL Server 2008 - оператор MERGE - выполнение нескольких действий в блоке WHEN MATCHED - PullRequest
10 голосов
/ 16 мая 2011

Я пытаюсь использовать оператор MERGE для выполнения следующего.У меня есть SP, и я передаю параметр TableValue к нему.Вот так выглядит мой SP:

CREATE PROC sp_AddInformation
@IntoTbl dbo.Information  READONLY ,
@baseEventType dbo.EventType READONLY 

AS

BEGIN

MERGE Information
USING (SELECT InfoID, NewsID, NewsType FROM @IntoTbl ) AS baseInfo (InfoID, NewsID, NewsType)
ON (info.infoID = baseInfo.InfoID)
WHEN MATCHED
        THEN 
        --EXEC dbo.sp_insertEventInfo(@baseEventType) (This is not working)

        UPDATE set Info.Reporter = baseInfo.Reporter
WHEN NOT MATCHED BY SOURCE
        THEN 

        DELETE
WHEN NOT MATCHED BY TARGET
    THEN INSERT VALUES (InfoID, NewsID,NewsType);
END

Кто-нибудь знает, как я могу вызвать другого SP или выполнить другое MERGE для других таблиц в блоке WHEN MATCHED?

Ответы [ 2 ]

10 голосов
/ 17 мая 2011

Невозможно вызвать хранимую процедуру или выполнить слияние из блока when matched.Вам разрешено только обновлять или удалять (или оба).Из документации merge .

 <merge_matched>::=
     { UPDATE SET <set_clause> | DELETE }

Вы можете использовать предложение output , чтобы захватить строки, которые были обновлены в when matched.Вывод может быть записан в табличную переменную, которую затем можно использовать в другом операторе слияния или в хранимой процедуре.Используйте inserted.* и $action в выводе.Строки из when matched это где $action = 'UPDATE'

1 голос
/ 17 мая 2011

Синтаксис показывает, что UPDATE SET или DELETE являются единственными параметрами для merge_matched

, как показано здесь

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