带可选空参数的SQL查询构建问题:未得到预期匹配结果
解决方案
你的问题出在条件判断的逻辑上,当前写法会在参数有值时,同时匹配字段等于参数和字段为NULL的行,不符合你期望的“参数非NULL时字段必须等于参数,参数为NULL时字段必须为NULL”的规则。
正确的SQL查询语句应该是:
SELECT * from @table where Inscode = @InsuranceCode AND (LocId = @LocationIds OR (LocId IS NULL AND @LocationIds IS NULL)) AND (effdate = @EffectiveDate OR (effdate IS NULL AND @EffectiveDate IS NULL))
逻辑说明
- 对于
LocId:当@LocationIds不为NULL时,匹配LocId等于该参数的行;当@LocationIds为NULL时,仅匹配LocId为NULL的行。 - 对于
effdate:当@EffectiveDate不为NULL时,匹配effdate等于该参数的行;当@EffectiveDate为NULL时,仅匹配effdate为NULL的行。
这样就能完全符合你提出的等价查询要求,同时支持参数为NULL或非NULL的各种场景。
内容的提问来源于stack exchange,提问作者Rahul Aggarwal
相关产品推荐
相关产品推荐

