使用MERGE语句时输出不同?

时间:2017-01-13 17:52:28

标签: sql sql-server

我使用MERGE将记录插入或更新到表格中:

MERGE INTO target 
USING SELECT * FROM @source
WHEN MATCHED THEN
UPDATE SET ...columns...
WHEN NOT MATCHED THEN
INSERT ...columns...
OUTPUT inserted.* INTO @insertedRecord

如果上述语句执行更新,是否将更新的记录插入表变量?

2 个答案:

答案 0 :(得分:3)

4.dat psuedotable将处理进入表格的新值,无论是插入还是更新。

inserted pseudotable将处理旧值,无论是删除还是更新(对于更新,它都是以前的值)。

更整洁:您也可以在合并中引用源表,例如deleted(尽管您可能需要一个别名才能使其工作)。

答案 1 :(得分:2)

$action会为您提供操作类型。

inserted.*将为您提供插入行的更新和值的新值。

deleted.*会为已删除行的更新和值提供旧值。

您可能希望将其推入临时表

OUTPUT $action, inserted.*, deleted.*, @source.* into #changes

并使用它来获得您正在寻找的结果。