You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Microsoft SQL环境下使用CASE语句同时更新多列的方案咨询

解答

初始查询运行说明

你编写的初始UPDATE查询无法正常运行。标准SQL以及SQL Server的T-SQL语法都不支持单个CASE表达式返回多组值同时赋值给多个列,该写法会直接触发语法报错。
你找到的逐列写CASE判断的更新方案语法是合法可运行的,仅缺点是重复写多轮相同的Column_1判断逻辑,代码冗余度高,后续维护修改也很麻烦。

SQL Server下更简洁的实现方案

你可以使用T-SQL的值表构造器(VALUES子句) 构建虚拟映射表,通过关联更新的方式实现需求,无需重复写判断逻辑,代码可读性和维护性都更好:

UPDATE t
SET
  Column_3 = map.val3,
  Column_4 = map.val4,
  Column_5 = map.val5
FROM 你的实际表名 t
INNER JOIN (
  -- 这里直接按Column_1匹配值、对应Column3/4/5值的格式添加所有映射关系即可
  VALUES
    ('First', 'first_col_3_val', 'first_col_4_val', 'first_col_5_val'),
    ('Second', 'second_col_3_val', 'second_col_4_val', 'second_col_5_val'),
    ('Tenth', 'tenth_col_3_val', 'tenth_col_4_val', 'tenth_col_5_val')
) AS map (match_col1, val3, val4, val5)
ON t.Column_1 = map.match_col1

补充说明

你提到的MySQL中ON DUPLICATE KEY UPDATE类的特性,SQL Server对应有MERGE语法,但你当前是固定匹配值更新单表的场景,上述VALUES关联更新的方案比MERGE更简洁、性能开销也更低,不需要额外使用MERGE。
如果你的映射规则非常多,也可以先把映射关系存入临时表/实体映射表后再做关联更新,执行效率会比逐列写CASE的方案更高。

内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:24:08