我想知道这是否可能。如果条件为真,则要更新列x,否则要更新列y。
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
我已经搜索了很多地方,尝试了一些方法,但是无法找到解决方案。我认为这不可能,但我想在这里问问看是否有人以前做过。
我想知道这是否可能。如果条件为真,则要更新列x,否则要更新列y。
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
我已经搜索了很多地方,尝试了一些方法,但是无法找到解决方案。我认为这不可能,但我想在这里问问看是否有人以前做过。
您不能使用条件来更改查询的结构,只能更改涉及数据。您可以这样做:
update table set
columnx = (case when condition then 25 else columnx end),
columny = (case when condition then columny else 25 end)
语义上相同,但请注意 两列将始终被更新。这 可能 不会引起问题,但如果您的事务量很高,那么这可能会导致并发问题。
要 特别 实现您要求的功能,唯一的方法是使用动态SQL。然而,我鼓励您远离这种解决方案。上面的解决方案几乎肯定已经足够满足您的需求。
UPDATE table
SET columnx = CASE WHEN condition THEN 25 ELSE columnx END,
columny = CASE WHEN condition THEN columny ELSE 25 END
23
秒复制了他的回复。我是一个快速的复制粘贴者! - Quassnoi我知道这是一个非常老的问题,但这对我有用:
UPDATE TABLE SET FIELD1 =
CASE
WHEN FIELD1 = Condition1 THEN 'Result1'
WHEN FIELD1 = Condition2 THEN 'Result2'
WHEN FIELD1 = Condition3 THEN 'Result3'
END;
我知道这是一个非常老的问题,并且该问题已被标记为已解决。然而,如果有人遇到像我这样的情况,其中表格具有更新事件数据记录触发器,则会出现问题。两个列都将得到更新,并且日志将产生无用的条目。我的方法是
IF (CONDITION) IS TRUE
BEGIN
UPDATE table SET columnx = 25
END
ELSE
BEGIN
UPDATE table SET columny = 25
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)
现在我假设你能编写一个处理 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
附言:原始问题或任何更新中从未提到过空值情况,但是正如您所看到的,这个非常简单的答案仍然可以处理它们。