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,'')
| 归档时间: |
|
| 查看次数: |
24186 次 |
| 最近记录: |