如何用单条UPDATE查询批量更新同一列的多个不同值
问题结论
你编写的合并后UPDATE语句逻辑完全正确,执行效果和原有4条分开执行的UPDATE语句完全一致。
正确性说明
- 你将所有语句共有的
Module = '23'过滤条件放到了全局WHERE子句中,首先就限定了只会修改Module字段为23的记录,完全匹配原有逻辑的限制要求 - CASE语句的映射规则完全对应原有4条语句的赋值规则:
'30'→'200'、'31'→'201'、'32'→'202'、'33'→'203' - 不匹配CASE条件的记录会走
else AuditObjectType分支,相当于原值不变,不会误修改其他不需要调整的Module=23的记录
可选优化建议
如果想要进一步提升执行效率(尤其表数据量较大时),可以在WHERE子句中额外增加AuditObjectType的范围过滤,避免扫描所有Module=23的记录,优化后语句如下:
update [Audit].[mfw].[Audit] set AuditObjectType = (case AuditObjectType when '30' then '200' when '31' then '201' when '32' then '202' when '33' then '203' else AuditObjectType end) WHERE Module = '23' AND AuditObjectType IN ('30','31','32','33')
内容的提问来源于stack exchange,提问作者user15060642
相关产品推荐
相关产品推荐

