SQL Server Express中CASE WHEN更新列值的代码修正请求
修复你的SQL Server UPDATE语句问题
没问题,我帮你排查下这段SQL的问题,顺便给你正确的写法:
原代码的错误原因
- CASE WHEN语法误用:你在每个
THEN后面错误地写了LOYAL_TO = 'xxx',CASE语句的作用是返回一个具体值,直接写要赋值的内容即可,不需要重复列名和等于号。 - 多余的结尾关键字:语句最后多了一个
case,CASE语句的正确闭合只需要END。 - 不必要的FROM子句:针对单表的UPDATE操作,SQL Server不需要额外加
from originals,反而可能造成语法混淆。
正确的SQL查询
UPDATE originals SET LOYAL_TO = CASE WHEN last_name = 'Mikelson' THEN 'KLAUS' WHEN first_name = 'KOL' THEN 'NO ONE' WHEN first_name = 'DAVINA' THEN 'MARCEL' WHEN first_name = 'camille' THEN 'MARCEL' WHEN first_name = 'vincent' THEN 'EVERYONE' WHEN first_name = 'josh' THEN 'MARCEL' WHEN FIRST_NAME = 'JACKSON' THEN 'HAYLEY' WHEN FIRST_NAME = 'Hollow' THEN 'DEMON' -- 可选:如果想让不满足以上条件的行保持原数值,添加下面的ELSE ELSE LOYAL_TO END;
额外说明
如果你的表中有不匹配上述所有条件的行,建议加上ELSE LOYAL_TO,这样这些行的LOYAL_TO值不会被改为NULL;如果确实希望不匹配的行设为NULL,可以去掉这个ELSE部分。
内容的提问来源于stack exchange,提问作者Simplify Life
相关产品推荐
相关产品推荐

