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

时间:2011-05-16 19:59:58

标签: sql-server-2008 merge

我正在尝试使用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

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

2 个答案:

答案 0 :(得分:10)

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

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

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

的行

答案 1 :(得分:1)

语法显示UPDATE SET或DELETE是merge_matched

的唯一选项

如图所示here