1

我正在使用以下查询在单个表上运行合并:

    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 列上运行。有没有办法将更新限制为仅更新不同的列并忽略没有不同数据的列?

4

1 回答 1

0

这并不完全符合您的要求,但您可以将 UPDATE 限制为那些至少具有一个更改值的行,并在 UPDATE 中使用 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 值检查)。

于 2013-07-24T09:28:17.153 回答