合并 - 仅在值已更改时更新

Tri*_*ror 20 sql sql-server merge

我在SQL Server中运行合并.在我的更新中,我想只在值已更改时更新行.每个更新都有一个版本行递增.以下是一个例子:

MERGE Employee as tgt USING 
(SELECT Employee_History.Emp_ID
, Employee_History.First_Name
, Employee_History.Last_Name
FROM Employee_History)
as src (Emp_ID,First_Name,Last_Name)
ON tgt.Emp_ID = src.Emp_ID
WHEN MATCHED THEN 
    UPDATE SET
    Emp_ID = src.Emp_ID,
    ,[VERSION] = tgt.VERSION + 1 
    ,First_Name = src.First_Name
    ,Last_Name = src.Last_Name
WHEN NOT MATCHED BY target THEN 
    INSERT (Emp_ID,0,First_Name,Last_Name)
VALUES 
    (src.Emp_ID,[VERSION],src.First_Name,src.Last_Name);
Run Code Online (Sandbox Code Playgroud)

现在,如果我只想更新行,从而增加版本,只要名称已更改.

a1e*_*x07 39

WHEN MATCHED可以有AND.此外,无需更新EMP_ID.

...
 WHEN MATCHED AND (trg.First_Name <> src.First_Name 
   OR trg.Last_Name <> src.Last_Name) THEN UPDATE
   SET 
   [VERSION] = tgt.VERSION + 1 
    ,First_Name = src.First_Name
    ,Last_Name = src.Last_Name
 ...
Run Code Online (Sandbox Code Playgroud)

如果Last_Name或First_Name可以为空,则需要NULL在比较trg.Last_Name <> src.Last_Name时处理值,例如ISNULL(trg.Last_Name,'') <> ISNULL(src.Last_Name,'')