合并声明:不要更新空白字段

时间:2012-11-07 10:52:09

标签: sql sql-server sql-server-2008 merge case

我正在从临时表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)都可以。哪个最好?

1 个答案:

答案 0 :(得分:1)

处理空白时(即空字符串),然后使用case语句

WHEN MATCHED THEN UPDATE
   SET case when t.username = '' then ts.username else t.username end

如果你正在处理null,那么使用isnull

WHEN MATCHED THEN UPDATE
   SET ts.username = isnull(t.username, ts.username),

如果它可以为空或空,则可以在案例陈述

中处理
WHEN MATCHED THEN UPDATE
   SET case when t.username = '' or t.username is null then ts.username else t.username end