其中 Column1 = case @var = 0 然后 null

where Column1 = case @var = 0 then null

我有以下 CTE 分层查询。

declare @Cat_Fkey int = 0;
WITH CTE AS
(
    SELECT tblCategories.ID as  RowID,  CatEName as RowName
    FROM tblCategories 
    WHERE Cat_Fkey  is null
    UNION ALL
    SELECT t.id, cast(cte.RowName +' '+ t.CatEName as varchar(100))
    FROM tblCategories t
    INNER JOIN CTE ON t.Cat_Fkey = CTE.RowID    
)

我想要一个关于 where 子句的案例。例如

WHERE Cat_Fkey = case
when @Cat_Fkey = 0 then null
else @Cat_Fkey
end

我知道where is null和=null不一样,上面的查询只是一种表示。

我希望结果是当@cat_fkey = 0 时,然后 cat_fkey 为空。 当@cat_fkey <> 时,那么 cat_fkey @cat_fkey.

使用布尔逻辑:

where 
    (@cat_fkey = 0 and cat_fkey is null)
    or (cat_fkey = @cat_fkey)

我按照 Larnu

的建议使用了 and/or
WHERE (@Cat_Fkey = 0 and Cat_Fkey is null) or (Cat_Fkey = @Cat_Fkey)