【问题标题】:single UPDATE query to modify multiple columns on multiple conditions SQL单个 UPDATE 查询在多个条件 SQL 上修改多个列
【发布时间】:2013-11-02 19:16:13
【问题描述】:

我有一个由三列组成的 sql 表 ID,KEYVALUE 现在我想根据与该行关联的KEY 列更新该表的特定行。

我尝试按照 UPDATE 查询在单个更新查询中更新多行。

UPDATE TABLE_NAME
SET VALUE=(CASE WHEN [KEY]='KEY1' THEN 'VALUE 1 MODIFIED'
                WHEN [KEY]='KEY3' THEN 'VALUE 3 MODIFIED'
          END)

但是这个查询用NULL 值更新了不匹配的行,如下图所示。

他们还有其他方法可以编写单个UPDATE 查询来根据不同的条件修改不同的列吗?

【问题讨论】:

  • 您需要在CASE 语句中包含ELSE VALUE END。如果没有 when 匹配,则 CASE 返回 null。

标签: sql-server-2008


【解决方案1】:
UPDATE TABLE_NAME
SET VALUE=(CASE WHEN [KEY]='KEY1' THEN 'VALUE 1 MODIFIED'
                WHEN [KEY]='KEY3' THEN 'VALUE 3 MODIFIED'
            ELSE ''
          END)

这会将不匹配的行设置为空字符串'',但您可以根据需要设置默认值。但是,如果您希望该列保留其价值,那么您可以这样做。

UPDATE TABLE_NAME
SET VALUE=(CASE WHEN [KEY]='KEY1' THEN 'VALUE 1 MODIFIED'
                WHEN [KEY]='KEY3' THEN 'VALUE 3 MODIFIED'
            ELSE VALUE
          END)

【讨论】:

  • 我更喜欢这个:UPDATE TABLE_NAME SET VALUE=(CASE WHEN [KEY]='KEY1' THEN 'VALUE 1 MODIFIED' WHEN [KEY]='KEY3' THEN 'VALUE 3 MODIFIED' END ) where KEY in ('KEY1','KEY2') 因为这个查询只会更新需要的两条记录。因此,如果 KEY 列被索引,它会更快。避免在 Else 部分保留旧值,从而提高性能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 2021-07-26
  • 2021-12-13
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多