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

标签 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

有谁知道我如何调用另一个 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/

相关文章:

sql - 计算给定结束时间 (datetime2) 和持续时间 (time(7)) 的开始时间

sql-server - 在 SQL Server 中对两列执行双重排序,并且主排序不在前两列的计算中

java - 如何合并N排序两个文本文件

python - 合并具有时间容差的 pandas 时间序列

git - 如何在不 pull 的情况下推送新分支

r - 使用辅助 data.frame dplyr R 合并两个 data.frames

asp.net - 在 asp.net 中缓存 sql server 数据,直到行被修改

sql - 做哪一项更有效

sql - 如何查找 SQL Server 2008 的列中是否只有一个连字符?

svn - 颠覆: howto find all revisions that are not merged to trunk?