SQL Server SQL检查where子句中case语句内的相等性?

5f0d552i  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(193)

代码如下:

WHERE   1=1
    AND TU.Auction_I IN (41, 42)
    AND @StatePickupID = CASE
        WHEN @StatePickupID IS NOT NULL
            THEN (UP.TransportStateID = @StatePickupID)
    END
    AND @StateDropoffID = CASE
        WHEN @StateDropoffID IS NOT NULL
            THEN (UD.TransportStateID = @StateDropoffID)
    END

所以我只想返回UP.TransportStateID等于StatePickupID的记录,如果它不为空的话,对于DropoffID也是一样。但是我得到了一个语法错误消息,其中等号是,我找不到任何其他在线检查相等性的方法。如果有任何帮助或建议,我将不胜感激。

k5ifujac

k5ifujac1#

我只想返回UP.TransportStateID等于StatePickupID(如果不为空)的记录
这将转换为以下 predicate :

@StatePickupID IS NULL OR @StatePickupID = UP.TransportStateID

当参数不为null时, predicate 在TransportStateID上进行筛选;当参数为空时,过滤器为空操作。
where子句中,对于两个参数:

WHERE 1 = 1
    AND TU.Auction_I IN (41, 42)
    AND ( @StatePickupID  IS NULL OR @StatePickupID  = UP.TransportStateID )
    AND ( @StateDropoffID IS NULL OR @StateDropoffID = UD.TransportStateID )

相关问题