我需要检索存储在数据库中的组(文件夹)的完整路径列表,如下所示:
select * from groups;
group_id parent_group_id name
-------- --------------- -------------------------------
1 NULL Root
2 1 Folder1
3 2 Folder2
4 3 Folder3
组的可能深度没有限制(几乎可以无限嵌套),所以我事先不知道我可以有多少级别。
我希望能够从查询中获得以下结果并将其加载到一个表中,我可以使用该表在其他查询中将完整路径与 group_ids 连接起来:
group_id path
-------- --------------------------------------------
1 /Root
2 /Root/Folder1
3 /Root/Folder1/Folder2
4 /Root/Folder1/Folder2/Folder3
我一直在查看其他一些具有类似需求的示例,但它似乎从来没有完全符合我的要求,而且没有一个明确的示例,我很难独自完成。
我唯一能想到的是将同一个表的别名连接到最大级别数,这可能很多,这是不切实际的。我需要一种方法以某种方式为每个组以递归方式循环并上树,将路径附加到变量直到最后,然后将最深的子 ID 及其完整路径存储在表中。
性能也很重要。这是一个生产数据库,我不能承受减速,这就是为什么我只想在需要时转储它,然后重用静态数据。最终,我想转储数千条记录,每条记录都链接到一个 group_id 并打印它们的完整路径。
如果不免费给我整个东西,有人能指出我正确的方向,也许能给我一个通用的例子来复制吗?
我们使用的是 SQL Server 2008 R2。