代码之家  ›  专栏  ›  技术社区  ›  John D

需要为NULL或NOT NULL的WHERE子句

  •  0
  • John D  · 技术社区  · 6 月前

    我需要帮助编码 where 存储过程中的子句传递这些输入参数:

    DECLARE @UID_CUSTOMER           int = 7
        ,   @BOOL_HAS_DEFECT        bit = 0
        ,   @BOOL_HAS_INSPECTION    bit = 0
        ,   @DTTM_TRIP_START        datetime = '2024-01-01'
        ,   @DTTM_TRIP_END          datetime = '2024-06-01'
        ;
    

    在T-SQL查询中,我将使用 WHERE 条款:

    WHERE ... other conditions ...
      AND (PTI.UID_PTINSPECTION IS NOT NULL)
      AND (TMD.UID_TMDEFECT IS NOT NULL);
    

    但是,我想使用入站参数 @BOOL_HAS_INSPECTION 如图所示:

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

    此代码片段无效。

    问:我如何使用 @胸部检查 正确指定 IS NOT NULL 和/或 IS NULL ?

    1 回复  |  直到 6 月前
        1
  •  4
  •   Dale K    6 月前

    这会奏效,但可能有一种更简洁的方法。

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