我有一个如下所示的合并语句
...
WHEN NOT MATCHED BY TARGET then Insert
(ID,
Status,
Read,
User,
ChangeDate)
VALUES
(Source.ID,
Source.Status,
Source.Read,
Source.User,
Source.ChangeDate)
...
我当前正在使用ID,Status和ChangeDate来将源与目标进行匹配。有时,ChangeDate可以更改,而无需对该行进行任何实际更改。我需要做的是让我的merge语句运行,并且如果Source.Status与基于ChangedDate的最新Target.Status不同,则仅插入新行。
我当前的目标表如下
ID Status Read User ChangeDate
33 Read Yes 76 01-Jun-2019
33 Closed Yes 76 12-Jun-2019
33 Read Yes 76 23-Jun-2019
我的merge语句想将下面的行插入到该表中
ID Status Read User ChangeDate
33 Read Yes 76 24-Jun-2019
我不希望发生这种情况,因为尽管ChangeDate已修改,但“状态”与上一行(2019年6月23日)相同
如果我的合并再次运行并尝试插入下面的行
ID Status Read User ChangeDate
33 Closed Yes 76 30-Jun-2019
这将插入新行,因为“关闭”状态与先前的“读取”状态不同。
对此表示感谢,我想不出任何解决方法。
谢谢 杰西卡(Jessica)
试图合并在多个不同的列上
答案 0 :(得分:0)
您不能使用ChangeDate字段来匹配源,因为您的合并总是插入的
关于更新,您可以这样做:
WHEN MATCHED AND (trg.example_column <> src.example_column
OR trg.example_column_2 <> src.example_column_2) THEN UPDATE
SET
[VERSION] = tgt.ChangeDate = GETDATE()