【发布时间】:2020-08-18 10:11:35
【问题描述】:
我有以下 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
我知道哪里是null和=null不一样,上面的查询只是一个表示。
我希望结果是@cat_fkey = 0,然后 cat_fkey 为空。 而当@cat_fkey ,那么在哪里 cat_fkey @cat_fkey.
【问题讨论】:
-
不要在
WHERE中使用CASE表达式。使用AND和OR子句。CASE表达式不是 SARGable,这意味着不能使用任何索引来帮助数据引擎过滤表中的行。
标签: sql sql-server where-clause common-table-expression recursive-query