使用MERGE语句更新SCD2

问题描述

我想使用MERGE语句更新SCD-2表。 所以我有

MERGE TARGET as t
USING SOURCE as s 
ON s.KEY = t.KEY

案例1:

WHEN MATCHED and s.CHECKSUM <> t.CHECKSUM 

在这种情况下,我要在目标UPDATE中的第一set row_actual_to = getdate() AND 第二行从源到目标的INSERT

情况2:

WHEN NOT MATCHED 

INSERT个新行

如何在一句话中做到这一点?

情况1 中同时列出UPDATEINSERT会导致错误 MERGE语句必须以分号(;)终止

解决方法

请勿使用merge语句。合并语句包含一长串的“无法修复”错误,这些错误在某些情况下会损坏您的数据。

使用Update语句,然后使用insert语句更简单,更容易调试,并且比合并阶段要好

Performance issue in merge statement

https://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/

https://weblogs.sqlteam.com/dang/2009/01/31/upsert-race-condition-with-merge/

https://sqlperformance.com/2013/02/t-sql-queries/another-merge-bug