樹形資料深度排序處理示例 遞迴法 sql

2022-02-11 20:23:15 字數 1398 閱讀 1499

--測試資料

create table tb(id char(3),pid char(3),name nvarchar(10))

insert tb select '001',null ,'山東省'

union all select '002','001','煙台市'

union all select '004','002','招遠市'

union all select '003','001','青島市'

union all select '005',null ,'四會市'

union all select '006','005','清遠市'

union all select '007','006','小分市'

go--廣度搜尋排序函式

create function f_sort(@id char(3)=null,@sort int=1)

returns @t_level table(id char(3),sort int)

asbegin

declare tb cursor local

forselect id from tb

where pid=@id

or(@id is null and pid is null)

open tb

fetch tb into @id

while @@fetch_status=0

begin

insert @t_level values(@id,@sort)

set @sort=@sort+1

if @@nestlevel<32 --如果遞迴層數未超過32層(遞迴最大允許32層)

begin

--遞迴查詢當前節點的子節點

insert @t_level select * from f_sort(@id,@sort)

set @sort=@sort+@@rowcount  --排序號加上子節點個數

endfetch tb into @id

endreturn

endgo

--顯示結果

select a.*

from tb a,f_sort(default,default) b

where a.id=b.id

order by b.sort

/*--結果

id   pid   name       

------ --------- ----------

001  null 山東省

002  001   煙台市

004  002   招遠市

003  001   青島市

005  null 四會市

006  005   清遠市

007  006   小分市

--*/

樹形資料廣度排序處理示例 sql

測試資料 declare t table id char 3 pid char 3 name nvarchar 10 insert t select 001 null 山東省 union all select 002 001 煙台市 union all select 004 002 招遠市 unio...

樹形資料深度排序處理示例 模擬單編號法 sql

測試資料 declare t table id char 3 pid char 3 name nvarchar 10 insert t select 001 null 山東省 union all select 002 001 煙台市 union all select 004 002 招遠市 unio...

樹形資料查詢示例

參考 樹形資料查詢示例 示例資料 create table tb id int identity 1,1 pid int,name varchar 20 insert tb select 0,中國 union all select 0,美國 union all select 0,加拿大 union ...