如何用单条SQL语句实现同一表内激活行状态切换更新
用单条UPDATE语句实现需求
可以通过CASE表达式在单次更新中完成状态切换,针对SpecID = @SpecID的行统一处理:
UPDATE SpecialTBL SET Active = CASE WHEN Active = 1 THEN 0 WHEN Active = 0 THEN 1 END WHERE SpecID = @SpecID;
如果你的实际需求是仅将某一特定行设为激活状态(Active=1),同时将同SpecID下原激活的行置为非激活(而非反转所有同SpecID行的状态),需要补充目标行的唯一标识(比如主键RowID),示例如下:
UPDATE SpecialTBL SET Active = CASE WHEN RowID = @TargetRowID THEN 1 ELSE 0 END WHERE SpecID = @SpecID;
这种写法不仅合并了操作,还能避免两条语句分开执行可能出现的事务不一致问题。
内容的提问来源于stack exchange,提问作者GrapeBoy
相关产品推荐
相关产品推荐

