我正在使用以下查询在单个表上运行合并:
MERGE INTO tbl rs
USING
SELECT res.sid, res.eid, res.a, res.b, res.c, res.d, res.e /* ... */
/* Merge magic here */
WHEN MATCHED THEN
UPDATE SET rs.a = res.a, rs.b = res.b, rs.c = res.c, rs.d = res.d, rs.e = res.e;
现在,当一列包含与原始数据不同的数据时,更新将在给定行的所有5列上运行。有没有办法限制更新只更新不同的列,并省略没有不同数据的列?
答案 0 :(得分:0)
这不是您要求的,但您可以将更新限制为具有至少一个更改值的行,并在更新中使用WHERE子句:
MERGE INTO tbl rs
USING
(SELECT res.sid, res.eid, res.a, res.b, res.c, res.d, res.e /* ... */ )
ON ( /* Merge magic here */ )
WHEN MATCHED THEN
UPDATE SET
rs.a = res.a,
rs.b = res.b,
rs.c = res.c,
rs.d = res.d,
rs.e = res.e
WHERE rs.a <> res.a
OR rs.b <> res.b
OR rs.c <> res.c
OR rs.d <> res.d
OR rs.e <> res.e;
(取决于您的数据/应用程序逻辑,您可能希望为NULL值添加额外的检查)。