--測試資料
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 ...