我有以下T-SQL函数:https://gist.github.com/cwattengard/11365802
这将以广度优先遍历的方式返回数据。有没有一种简单的方法可以让这个函数在深度优先的遍历中返回数据?我有一个treeview-component,它支持这个(遗留系统)。
我已经有一个类似的存储过程,它以深度优先遍历的方式返回树,但是它使用游标并且非常慢。(6-7秒,而这个函数只需不到一秒的时间处理相同的数据)。
发布于 2014-04-28 17:11:39
我想我刚刚灵光乍现。如果我添加CTE已经提供的Path变量,并按此进行排序,我就得到了我想要的。OrgID是一个唯一的ID,所以按它排序将使它按照用户的预期输出排序(按时间顺序),并且对树视图是深度优先的。
发布于 2016-03-22 16:43:59
http://sqlanywhere.blogspot.in/2012/10/example-recursive-union-tree-traversal.html下面的图表显示了树形结构表的主键:
1
|
---------------------------------------
2 93 4 5
| | | |
-------------- ------------ -------- ------
6 7 8 9 10 11 12 13 14 15 16 17 18 19
| | | |
----- ----- ----- -----
27 26 25 24 23 22 21 20以下是广度优先和深度优先查询应该返回的内容:
Breadth-First Depth-First
1 1
2 2
93 6
4 7
5 27
6 26
7 8
8 9
9 10
10 93
11 11
12 12
13 13
14 25
15 24
16 14
17 4
18 15
19 16
27 17
26 23
25 22
24 5
23 18
22 21
21 20
20 19发布于 2014-04-28 16:59:11
如果你用tekst对输出进行排序,这样做行吗?
首先在函数内部填充表变量@unsorted;最后返回Select * from @unsorted order by tekst
https://stackoverflow.com/questions/23336520
复制相似问题