我正在尝试使用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吗?
答案 0 :(得分:10)
无法从when matched
块调用存储过程或合并。您只能进行更新或删除(或两者)。来自merge的文档。
<merge_matched>::=
{ UPDATE SET <set_clause> | DELETE }
您可以使用output子句捕获when matched
中更新的行。输出可以在表变量中捕获,然后可以在另一个合并语句或存储过程中使用。在输出中使用inserted.*
和$action
。 when matched
中的行是$action = 'UPDATE'
答案 1 :(得分:1)
语法显示UPDATE SET或DELETE是merge_matched
的唯一选项如图所示here