我正在寻找某种从如下定义的树表中提取数据的方法。
表树定义为:-
TreeID uniqueidentifier
TreeParent uniqueidentifier
TreeCode varchar(50)
TreeDesc varchar(100)
一些数据(23k 行),Parent Refs 回到表中的 ID
以下 SQL 呈现整个树(大约需要 2 分钟 30 分钟)
我需要执行以下操作。
1) 使用其 LVL 1 父级渲染每个树节点
2) 渲染所有具有与 TreeDesc 匹配的描述的节点,例如“SomeText%”
3) 渲染所有用于单个树 id 的父节点。
第 2 项和第 3 项需要 2 分钟 30 分钟,所以这需要更快!
第 1 项,只是不知道如何在不杀死 SQL 或永远占用的情况下做到这一点
任何建议都会有所帮助
谢谢
朱利安
WITH TreeCTE(TreeCode, TreeDesc, depth, TreeParent, TreeID)
AS
(
-- anchor member
SELECT cast('' as varchar(50)) as TreeCode ,
cast('Trees' as varchar(100)) as TreeDesc,
cast('0' as Integer) as depth,
cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier) as TreeParent,
cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier) as TreeID
UNION ALL
-- recursive member
SELECT s.TreeCode,
s.TreeDesc,
cte.depth+1,
isnull(s.TreeParent, cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier)),
isnull(s.TreeID, cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier))
FROM pdTrees AS S
JOIN TreeCTE AS cte
ON isnull(s.TreeParent, cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier)) = isnull( cte.TreeID , cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier))
)
-- outer query
SELECT
s.TreeID, s.TreeCode, s.TreeDesc, s.depth, s.TreeParent
FROM TreeCTE s