【发布时间】:2012-11-07 10:52:09
【问题描述】:
我正在执行从临时表 t 到主表 ts 的 MERGE 语句,匹配 ID 字段。它包含以下内容:
WHEN MATCHED THEN UPDATE
SET ts.username = t.username, ts.password = t.password, ts.title = t.title, ts.firstname = t.firstname, ts.surname = t.surname, ts.email = t.email
如果临时表t 中的用户名和密码为空,我不想更新主表ts。我该怎么做?
编辑:似乎 CASE 语句或使用 COALESCE(NULLIF(t.username, ''), ts.username) 将起作用。哪个最好?
【问题讨论】:
-
您可以进行虚拟更新吗? IE。设置 ts.username = coalesce(t.username, ts.username), ...
-
@Frank Schmitt 我从来不知道 COALESCE 函数。如果我将它与 NULLIF 一起使用,我认为就可以了!
-
实际问题是什么:您想从更新中删除记录吗,因为它总是会更新,即使您将其设置为以前的值。
-
只是不想用空白值覆盖现有的用户名/密码。感谢 Frank Schmitt 和 Chris Gessler
标签: sql sql-server sql-server-2008 merge case