sql - 合并语句: Don't update blank field

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

我正在将临时表 t 中的 MERGE 语句执行到主表 ts 中,并匹配 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) 会起作用。哪个最好?

最佳答案

处理空格(即空字符串)时,则使用 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),

如果它可以为空或为 null,则可以在 case 语句中处理两者

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

关于sql - 合并语句: Don't update blank field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13268170/

相关文章:

php - 所选语言和数据库是否有性能提升?

sql-server-2008 - 从 View 及其所有相关表中删除记录

数据库设计 : Could I make a column in a table only allows one 'true' for some specific rows and others false for same specific rows

sql-server-2008 - 尝试删除默认值,但收到一条消息,提示它在服务器上不存在

sql - 间歇时间序列。返回 T-SQL 中最新数据的最后一个连续 block 的第一个日期

sql - 我可以用纯 SQL 做这种连接操作吗?

mysql - SQL 合并相差 1 个参数的行

sql-server - ALTER TABLE 语句与 FOREIGN KEY 约束冲突

sql - 如何使用 SQL Management Studio 在数据库之间传输所有表?

mysql - 如何通过 select 语句指定新列的类型