使用sql查询从db填充树结构值

时间:2014-01-02 16:20:46

标签: sql sql-server tree

我有类似于此的表结构

enter image description here

我想使用sql查询构建权限树。

以下是示例输入/输出列表

enter image description here

有没有办法在没有游标的情况下使用sql查询来提取这些数据?

注意:整个表结构向下钻取到此树

enter image description here

这里的目标是显示给定节点的每个子节点。

1 个答案:

答案 0 :(得分:2)

您可以使用自引用公用表表达式和STUFF来获取所需的输出。可以使用顺序字符串完成排序。如果有更多的话,我会用一个例子来编辑答案。

declare @emps table (uid int, boss int);
insert into @emps (uid,boss)
values (1,6),(2,6),(3,6),(4,6),(5,6),(7,9),(8,9),(6,15),(9,15),(15,20),(17,20);

declare @user int = 20;
declare @output varchar(100) = '';
WITH cte (uid,ord)
AS ( SELECT uid, 0
FROM @emps
WHERE boss = @user
UNION ALL
SELECT e.uid, cte.ord + 1
FROM @emps e
INNER JOIN cte ON cte.uid = e.boss)
SELECT @output = @output + convert(varchar,uid) + ','
FROM cte
order by ord

select @output