SQL中CASE语句无法使用BEGIN块,需单CASE更新两字段的问题
如何在UPDATE中同时更新两个字段(替代错误的CASE+BEGIN写法)
你的写法错误在于:CASE是表达式,只能返回单个值,无法嵌入BEGIN块执行多字段赋值操作。要实现同时更新MSR和WRKDAY两个字段,你需要为每个字段单独编写CASE逻辑,或者通过条件过滤来完成。
推荐的正确写法如下:
UPDATE PYR SET MSR = CASE WHEN MSR = :WRKH THEN NULL ELSE MSR END, WRKDAY = CASE WHEN MSR = :WRKH THEN WRKDAY - 1 ELSE WRKDAY END WHERE MSR = :WRKH;
说明:
- 每个字段独立使用CASE表达式:当
MSR等于:WRKH时,分别对MSR设为NULL,WRKDAY减1;否则保留原字段值。 - 添加
WHERE子句可以只更新符合条件的行,避免对全表无意义的赋值,提升执行效率。
如果你使用的数据库支持更简洁的条件更新语法,也可以基于对应语法调整,但上述写法是通用的跨数据库方案。
内容的提问来源于stack exchange,提问作者Henry Olive
相关产品推荐
相关产品推荐

