T-SQL:在UPDATE语句中使用CASE根据条件更新某些列
我想知道这是否可能。 如果条件为真,我想更新列x,否则列y将被更新
UPDATE table SET (CASE (CONDITION) WHEN TRUE THEN columnx ELSE columny END) = 25
我已经搜遍了,尝试了一些东西,无法find解决scheme。 我认为这是不可能的,但我想我会问在这里,看看有没有人做过。 提前致谢。
您不能使用条件来改变查询的结构,只是涉及到的数据。 你可以这样做:
update table set columnx = (case when condition then 25 else columnx end), columny = (case when condition then columny else 25 end)
这在语义上是相同的,但是请记住, 两列将总是被更新 。 这可能不会导致任何问题,但如果您的事务量很高,则可能会导致并发问题。
唯一的方法就是使用dynamicSQL。 但是,这是我鼓励你远离的东西。 上面的解决scheme几乎可以满足您的要求。
UPDATE table SET columnx = CASE WHEN condition THEN 25 ELSE columnx END, columny = CASE WHEN condition THEN columny ELSE 25 END
我想要更改或更新我的联系方式8018070999 8018070777使用案例语句
update [Contacts] set contactNo=(case when contactNo=8018070777 then 8018070999 else contactNo end)
我相信您可以通过调整其他答案来省略更新“不需要的”列,如下所示:
update table set columnx = (case when condition1 then 25 end), columny = (case when condition2 then 25 end)
据我了解,只有当条件得到满足时才会更新。
读完所有评论后,这是最有效的:
Update table set ColumnX = 25 where Condition1 Update table set ColumnY = 25 where Condition1
样品表:
CREATE TABLE [dbo].[tblTest]( [ColX] [int] NULL, [ColY] [int] NULL, [ColConditional] [bit] NULL, [id] [int] IDENTITY(1,1) NOT NULL ) ON [PRIMARY]
样本数据:
Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 0) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 0) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 1) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 1) Insert into tblTest (ColX, ColY, ColConditional) values (1, null, null) Insert into tblTest (ColX, ColY, ColConditional) values (2, null, null) Insert into tblTest (ColX, ColY, ColConditional) values (null, 1, null) Insert into tblTest (ColX, ColY, ColConditional) values (null, 2, null)
现在我假设你可以写一个处理空值的条件。 对于我的例子,我假设你已经写了这样一个条件,评估为True,False或Null。 如果你需要帮助,让我知道,我会尽我所能。
现在运行这两行代码,当且仅当ColConditional为True(1)且Y为25当且仅当ColConditional为False(0)时,
Update tblTest set ColX = 25 where ColConditional = 1 Update tblTest set ColY = 25 where ColConditional = 0
PS原始问题中没有提到空的情况,也没有提到任何问题的更新,但正如你所看到的,这个非常简单的答案无论如何都会处理它们。