我相信您可以通过调整其他答案来省略更新“不想要的”列,如下所示:
update table set
columnx = (case when condition1 then 25 end),
columny = (case when condition2 then 25 end)`
据我了解,只有在满足条件时才会更新。
看完所有的cmets,这个效率最高:
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 的条件。如果您需要这方面的帮助,请告诉我,我会尽力而为。
现在运行这两行代码实际上将 X 更改为 25 当且仅当 ColConditional 为 True(1) 并且 Y 更改为 25 当且仅当 ColConditional 为 False(0)
Update tblTest set ColX = 25 where ColConditional = 1
Update tblTest set ColY = 25 where ColConditional = 0
附:原始问题或问题的任何更新中从未提及 null 案例,但正如您所见,这个非常简单的答案无论如何都可以处理它们。