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

如何用@BOOL_HAS_INSPECTION参数实现T-SQL WHERE子句的NULL判断?

解决T-SQL中用参数控制NULL判断的问题

你的写法错误是因为CASE语句无法直接返回IS NOT NULL/IS NULL这类条件关键字,正确的做法是通过逻辑表达式组合来实现参数控制:

方法一:逻辑与或组合(推荐)

这种写法可读性强,性能也更优:

AND (
    (@BOOL_HAS_INSPECTION = 1 AND PTI.UID_PTINSPECTION IS NOT NULL)
    OR (@BOOL_HAS_INSPECTION = 0 AND PTI.UID_PTINSPECTION IS NULL)
)

逻辑清晰:当参数为1时,强制检查字段非空;参数为0时,强制检查字段为空。

方法二:借助CASE返回布尔等价结果

如果偏好使用CASE,可以让它返回1/0代表布尔结果,再与1比较:

AND (
    CASE 
        WHEN @BOOL_HAS_INSPECTION = 1 THEN IIF(PTI.UID_PTINSPECTION IS NOT NULL, 1, 0)
        ELSE IIF(PTI.UID_PTINSPECTION IS NULL, 1, 0)
    END = 1
)

同理,对于@BOOL_HAS_DEFECT控制TMD.UID_TMDEFECT的判断,也可以套用同样逻辑:

AND (
    (@BOOL_HAS_DEFECT = 1 AND TMD.UID_TMDEFECT IS NOT NULL)
    OR (@BOOL_HAS_DEFECT = 0 AND TMD.UID_TMDEFECT IS NULL)
)

完整WHERE子句示例

WHERE ... other conditions ...
  AND (
      (@BOOL_HAS_INSPECTION = 1 AND PTI.UID_PTINSPECTION IS NOT NULL)
      OR (@BOOL_HAS_INSPECTION = 0 AND PTI.UID_PTINSPECTION IS NULL)
  )
  AND (
      (@BOOL_HAS_DEFECT = 1 AND TMD.UID_TMDEFECT IS NOT NULL)
      OR (@BOOL_HAS_DEFECT = 0 AND TMD.UID_TMDEFECT IS NULL)
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:13:14