Sql 在WHERE子句中使用IsNull()

Sql 在WHERE子句中使用IsNull(),sql,sql-server,Sql,Sql Server,此查询: SELECT sc.ContactID , c.Price , p.ParkID FROM tblc c JOIN tblsc ON c.ID= sc.ID LEFT JOIN tblp p ON sc.ID= p.ID WHERE (stuff = stuff) AND (stuff = stuff) 返回以下内容: ContactID LeadSalePr

此查询:

SELECT
    sc.ContactID
    , c.Price
    , p.ParkID
    FROM
        tblc c
        JOIN tblsc ON c.ID= sc.ID
        LEFT JOIN tblp p ON sc.ID= p.ID
    WHERE
        (stuff = stuff)
        AND (stuff = stuff)
返回以下内容:

ContactID    LeadSalePrice     ParkID
-------------------------------------
    1           50             NULL
    2           60              22
现在,我正在尝试为
ParkID
设置另一个
子句。但是,我只想在
ParkID
不为空的行上执行此
。因此,如果在
ParkID
为空的行上,我们希望始终保留这些行。对于ParkID不为NULL的行,我们只希望在
ParkID
与参数匹配时保留这些行

如果@ParkID=22,则返回两行

如果@ParkID 22,则只返回最上面一行

如果@ParkID=NULL,则返回两行

我试过这个:

SELECT
    sc.ContactID
    , c.Price
    , p.ParkID
FROM
    tblc c
    JOIN tblsc ON c.ID= sc.ID
    LEFT JOIN tblp p ON sc.ID= p.ID
    WHERE 
        (stuff = stuff)
        AND (stuff = stuff)
        AND p.ParkID = 
            CASE WHEN p.ParkID IS NULL THEN 
                NULL
           ELSE
                @ParkID
            END
这不起作用,因为与null比较的正确方法不是:

= NULL
它是

出于同样的原因(我假设),这也不起作用:

AND p.ParkID = Isnull(p.ParkID, @ParkID)

如何执行此操作?

只需检查
p.ParkID
是否为
NULL
或是否匹配
@ParkID

WHERE p.ParkID IS NULL
   OR p.ParkID = @ParkID
更紧凑:

WHERE p.ParkID IN ('', NULL)

谢谢我来测试一下
WHERE p.ParkID IN ('', NULL)