SQL单条UPDATE语句如何基于单值匹配实现多列更新,排查语法错误
多列条件更新的正确SQL实现
你之前的写法触发Incorrect syntax near ','报错,本质是写法不符合T-SQL的UPDATE语法规则:
- CASE表达式的设计逻辑是单值输出,一次执行只能返回一个标量结果,没法同时给多列赋值
- UPDATE语句的SET子句强制要求:每一个待更新的列,都必须独立写「列名 = 赋值逻辑」的格式,不能把多个列名并列堆在等号左侧让单个表达式批量赋值
可直接运行的调整后代码
按照语法规则调整为每个列单独绑定对应CASE判断逻辑,即可在单条语句内完成多列同步更新:
UPDATE HMI.[dbo].Mak8 SET reg2 = CASE WHEN Mak_Ip = '192.168.0.6' THEN 200 WHEN Mak_Ip = '192.168.0.8' THEN 210 ELSE reg2 END, reg3 = CASE WHEN Mak_Ip = '192.168.0.6' THEN 250 WHEN Mak_Ip = '192.168.0.8' THEN 270 ELSE reg3 END, reg4 = CASE WHEN Mak_Ip = '192.168.0.6' THEN 270 WHEN Mak_Ip = '192.168.0.8' THEN 300 ELSE reg4 END
注意事项
- 上述代码是单条UPDATE语句执行,不会拆成多次全表扫描,执行性能和你之前验证通过的单列更新语句一致
- 每个CASE分支里保留
ELSE 原列名的逻辑,可以匹配你原有的更新习惯:不满足指定IP条件的行,对应列的值不会被修改,保持原有状态 - SQL Server 2022之前的版本不支持行构造形式的多值CASE语法(即
CASE WHEN ... THEN (val1, val2, val3)的写法),强行使用就会触发逗号附近的语法报错
内容的提问来源于stack exchange,提问作者Alpay Toprak
相关产品推荐
相关产品推荐

