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

MS SQL批量更新students表mark字段 替代多条UPDATE语句的优雅方案

MS SQL 批量更新学生成绩的最优写法

你可以通过UPDATE关联临时值列表的方式一次性完成所有成绩更新,无需重复编写多条UPDATE语句,写法更简洁也更易维护:

UPDATE s
SET s.mark = v.new_mark
FROM students s
INNER JOIN (
    VALUES
        (1, 4.1),
        (2, 1.8),
        (3, 2.7),
        (4, 3.5)
        -- 新增其他(id, 成绩)对直接按格式补充在此处即可
) AS v (student_id, new_mark)
ON s.id = v.student_id;

方案优势

  • 仅需要维护VALUES后的id和对应成绩键值对,不用重复写更新模板
  • 所有更新默认在同一个事务中执行,要么全部生效要么全部回滚,不会出现部分更新成功、部分失败的数据不一致问题
  • 性能远优于逐条执行UPDATE语句

备选写法:CASE WHEN 实现

如果你的MS SQL版本比较旧不支持上面的VALUES派生表写法,可以用CASE WHEN实现,不过数据量较大时可读性会下降:

UPDATE students
SET mark = CASE id
    WHEN 1 THEN 4.1
    WHEN 2 THEN 1.8
    WHEN 3 THEN 2.7
    WHEN 4 THEN 3.5
    ELSE mark -- 必须加ELSE,否则未匹配到的id的mark会被覆盖为NULL
END
WHERE id IN (1,2,3,4); -- 必须加WHERE过滤,否则会扫描全表拉低性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:15:04