T-SQL:在UPDATE语句中使用CASE根据条件更新某些列

pqs*_*qsk 91 sql case sql-update

我想知道这是否可行.如果条件为真,我想更新列x,否则将更新列y

UPDATE table SET
     (CASE (CONDITION) WHEN TRUE THEN columnx
                       ELSE columny
      END)
= 25
Run Code Online (Sandbox Code Playgroud)

我搜索了一遍,尝试了一些东西,但无法找到解决方案.我认为这是不可能的,但我想我会问这里,看看是否有人之前做过.提前致谢.

Ada*_*son 168

您不能使用条件来更改查询的结构,只需更改所涉及的数据.你可以这样做:

update table set
    columnx = (case when condition then 25 else columnx end),
    columny = (case when condition then columny else 25 end)
Run Code Online (Sandbox Code Playgroud)

这在语义上是相同的,但请记住,两列都将始终更新.这可能不会给您带来任何问题,但如果您的事务量很高,那么这可能会导致并发问题.

具体做你要问的唯一方法是使用动态SQL.然而,这是我鼓励你远离的东西.上面的解决方案几乎肯定足以满足您的需求.


Qua*_*noi 22

UPDATE  table
SET     columnx = CASE WHEN condition THEN 25 ELSE columnx END,
        columny = CASE WHEN condition THEN columny ELSE 25 END
Run Code Online (Sandbox Code Playgroud)

  • @pqsk:是的,我只是复制了Adam的回复,在他发布之前的23秒.我是一个快速的copypaster! (22认同)
  • @pqsk:如果你把光标放在`*min before`上,它会显示你发布的确切时间. (2认同)
  • 公平地说,即使两者都是一样的:如果亚当的出现在你之后,他确实详细阐述了一些。这就是为什么我将他标记为答案的原因。不过谢谢。 (2认同)

小智 7

我知道这是一个非常古老的问题,但这对我有用:

UPDATE TABLE SET FIELD1 =
CASE 
WHEN FIELD1 = Condition1 THEN 'Result1'
WHEN FIELD1 = Condition2 THEN 'Result2'
WHEN FIELD1 = Condition3 THEN 'Result3'
END;
Run Code Online (Sandbox Code Playgroud)

问候

  • 请注意:不符合任何条件的字段将在此查询中设置为“null”。不要忘记在“WHEN”案例之后设置“ELSE FIELD1”,以免触及其余数据。 (2认同)

Deb*_*ash 5

在此输入图像描述

我想使用 Case 语句将我的 ContactNo 更改或更新为 8018070999,其中有 8018070777

update [Contacts] set contactNo=(case 
when contactNo=8018070777 then 8018070999
else
contactNo
end)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 为此,为什么不使用此查询 UPDATE [Contacts] SET contactNo = 8018070999 WHERE contactNo = 8018070777 (3认同)