SQL Server 2008 - MERGE语句 - 在WHEN MATCHED块中执行多个操作

Asd*_*dfg 10 merge sql-server-2008

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在WHEN MATCHED块中调用另一个SP或在其他表上执行另一个MERGE?

Mik*_*son 10

无法从when matched块调用存储过程或合并.您只能进行更新或删除(或两者).从合并文档.

 <merge_matched>::=
     { UPDATE SET <set_clause> | DELETE }
Run Code Online (Sandbox Code Playgroud)

您可以使用output子句捕获已更新的行when matched.输出可以在表变量中捕获,然后可以在另一个合并语句或存储过程中使用.在输出中使用inserted.*$action.来自when matched哪里的行$action = 'UPDATE'