sql - 更新并插入 MERGE 查询
问题描述
我有以下查询:
MERGE INTO member_staging x
USING (SELECT member_id, first_name, last_name, rank, startdate, enddate FROM members) y
ON (x.member_id = y.member_id)
WHEN MATCHED THEN
UPDATE SET x.first_name = y.first_name,
x.last_name = y.last_name,
x.rank = y.rank,
enddate = GETDATE();
WHERE x.first_name <> y.first_name OR
x.last_name <> y.last_name OR
x.rank <> y.rank
WHEN NOT MATCHED THEN
INSERT(x.member_id, x.first_name, x.last_name, x.rank)
VALUES(y.member_id, y.first_name, y.last_name, y.rank);
我想在更新后使用新值和 SYSDATE 在 startdate 和 9999/12/31 在 enddate 更新后插入新记录。
这是一个例子:
member_id first_name last_name rank startdate enddate
1 John LeBlanc 12 2021/09/10 9999/12/31
如果记录更新,排名变为 9:
member_id first_name last_name rank startdate enddate
1 John LeBlanc 12 2021/09/10 2021/09/16
1 John LeBlanc 9 2021/09/17 9999/12/31
将更新旧版本并添加新版本,将 +1 添加到 startdate 以避免重叠。