SQL Server中用IS NULL条件更新多列时WHERE子句的正确写法疑问
结论
写法2是符合SQL语法规范的正确写法,写法1会直接触发语法错误无法执行。
原因说明
- SQL的
WHERE子句用于筛选符合条件的行,多个判断条件之间必须使用逻辑运算符(AND/OR/NOT)连接,逗号在WHERE子句中没有逻辑判断的语义,数据库执行写法1时会直接抛出语法错误。 - 你给出的写法2的逻辑是:仅当三个字段同时为NULL时,才将这三个字段统一更新为0,如果你确认业务需求就是匹配三个字段全为空的行再更新,直接使用写法2即可。
拓展场景写法
如果你的需求是只要单个字段为NULL就将该字段更新为0,保留其他字段已有的非NULL值,可以使用下面的优化写法,避免覆盖已有合法值,同时减少无效更新:
UPDATE sometable SET [isConditionOnePassed] = ISNULL([isConditionOnePassed], 0), [isSecondPassed] = ISNULL([isSecondPassed], 0), [isThirdPassed] = ISNULL([isThirdPassed], 0) WHERE [isConditionOnePassed] IS NULL OR [isSecondPassed] IS NULL OR [isThirdPassed] IS NULL
内容的提问来源于stack exchange,提问作者DarknessPlusPlus
相关产品推荐
相关产品推荐

