gpt4 book ai didi

sql - 合并 - 仅在值发生更改时更新

转载 作者:行者123 更新时间:2023-12-02 01:56:01 29 4
gpt4 key购买 nike

我正在 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);

现在,如果我只想更新行,从而增加版本,仅当名称已更改时。

最佳答案

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
...

如果 Last_Name 或 First_Name 可为空,则需要注意 NULL比较 trg.Last_Name <> src.Last_Name 时的值,例如 ISNULL(trg.Last_Name,'') <> ISNULL(src.Last_Name,'')

关于sql - 合并 - 仅在值发生更改时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107273/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com