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

SQL Server:如何根据cl1自身值与FL列值更新cl1多值

正确实现SQL Server中基于多条件的列更新

你的问题出在几个关键地方:一是在SET里多次给cl1赋值,SQL会只保留最后一次赋值逻辑,完全打乱了你想要的匹配规则;二是字符串常量没加单引号(比如20gs应该写成'20gs'),数据库会把它当成对象名而非字符串值;另外还注意到你写的cl1 = '11rx'应该是笔误,对应规则里的'14rx'对吧?

下面是修正后的正确写法,我们把所有cl1的匹配逻辑整合到一个CASE语句里,同时保留FL的过滤条件:

UPDATE your_table_name
SET cl1 = CASE 
            WHEN cl1 = '15g0' THEN '20gs'
            WHEN cl1 = '22g0' THEN '22gs'
            WHEN cl1 = '14rx' THEN '14rs'
            ELSE cl1  -- 如果没有匹配的情况,保持原数值不变
          END
WHERE FL IN ('m31', 'm28')  -- 用IN比多个OR更简洁高效

关键点说明:

  • 把所有cl1的转换规则放在同一个CASE语句中,数据库会按顺序匹配条件,找到第一个符合的就返回对应值,逻辑清晰且不会出现多次赋值的冲突问题。
  • 添加ELSE cl1是为了避免那些不满足转换规则的cl1值被意外改成NULL,如果不需要保留原数值,可以去掉这部分,但通常建议加上来保证数据安全。
  • 用FL IN ('m31', 'm28')替代原来的多个OR,写法更简洁,性能上也和OR等价(SQL Server会自动优化)。

另外,为了避免误操作,你可以先运行一个SELECT语句验证转换结果:

SELECT 
    cl1 AS original_cl1,
    CASE 
        WHEN cl1 = '15g0' THEN '20gs'
        WHEN cl1 = '22g0' THEN '22gs'
        WHEN cl1 = '14rx' THEN '14rs'
        ELSE cl1
    END AS new_cl1,
    FL
FROM your_table_name
WHERE FL IN ('m31', 'm28')

确认转换结果正确后再执行UPDATE,这样更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:05:59