SQL Server中CASE WHEN语句NULL值匹配失效问题求解
SQL NULL值匹配查询修复方案
问题根因
原查询在@Cell参数为NULL时失效,核心是SQL标准中NULL无法通过=运算符完成等值匹配,NULL = NULL的运算结果为UNKNOWN而非TRUE,因此原WHERE条件永远无法命中Cell字段为NULL的行。
修复后的查询代码
仅修改WHERE子句中的CASE WHEN逻辑,同时支持NULL和非NULL值匹配:
DECLARE @Cell NVARCHAR(100) = '123' -- 赋值为NULL也可正常执行 SELECT * FROM Temp WHERE 1 = CASE WHEN @Cell IS NULL AND Cell IS NULL THEN 1 WHEN @Cell IS NOT NULL AND Cell = @Cell THEN 1 ELSE 0 END
效果说明
- 当@Cell赋值为非NULL值时,会返回所有Cell字段和参数值相等的行
- 当@Cell赋值为NULL时,会返回所有Cell字段为NULL的行
- 该CASE结构支持扩展叠加更多业务判断条件,适配复杂查询场景
内容的提问来源于stack exchange,提问作者Peter PitLock
相关产品推荐
相关产品推荐

