SQL Server CASE里面的where子句不适用于NULL值

prs*_*pit 3 sql t-sql sql-server sql-server-2008

我想要的是什么时候@AddressCode是null然后只是执行

SELECT
    *
FROM
    Addresses
WHERE
    1= 1
Run Code Online (Sandbox Code Playgroud)

如果@AddressCode不为NULL则执行

SELECT
    *
FROM
    Addresses
WHERE
    1= 1 AND @AddressCode=Addresses.AddressCode
Run Code Online (Sandbox Code Playgroud)

我怎么能实现这个...我尝试了下面的查询,它不适用于NULL有价值的地址或什么时候@AddressCode is NULL....(地址只是一个虚构的表名)

Declare @AddressCode varchar(20)
Set @AddressCode=NULL

SELECT
    *
FROM
    Addresses
WHERE
    1= 1
    AND
    CASE @AddressCode
        WHEN NULL
        THEN Addresses.AddressCode
        ELSE @AddressCode
    END =Addresses.AddressCode
Run Code Online (Sandbox Code Playgroud)

我努力但我无法做到...我知道我可以写IF语句并写个别选择语句但不想这样做,因为我有很多这样的标准@AddressCode:(

Pau*_*ock 11

SELECT *
FROM
    Addresses
WHERE
    (@AddressCode IS NULL OR Addresses.AddressCode = @AddressCode)
Run Code Online (Sandbox Code Playgroud)

  • 如果地址代码被索引,你需要使用`RECOMPILE`来防止在`@AddressCode IS NOT NULL'的情况下进行不必要的扫描 (2认同)