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
相关产品推荐
相关产品推荐

