我正在尝试使用 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 或在 WHEN MATCHED 块中的其他表上执行另一个 MERGE?
最佳答案
无法从 when matched
调用存储过程或合并堵塞。您只能进行更新或删除(或两者)。来自 merge 上的文档.
<merge_matched>::=
{ UPDATE SET <set_clause> | DELETE }
您可以使用 output子句捕获在
when matched
中更新的行.可以在表变量中捕获输出,然后可以在另一个合并语句或存储过程中使用该变量。使用 inserted.*
和 $action
在输出中。来自 when matched
的行在哪里$action = 'UPDATE'
关于sql-server-2008 - SQL Server 2008 - MERGE 语句 - 在 WHEN MATCHED block 中执行多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6022641/