查詢指定節點的所有子節點的示例函式 sql

2021-09-08 03:36:17 字數 1044 閱讀 2424

--測試資料

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_cid(@id char(3))

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

asbegin

declare @level int

set @level=1

insert @t_level select @id,@level

while @@rowcount>0

begin

set @level=@level+1

insert @t_level select a.id,@level

from tb a,@t_level b

where a.pid=b.id

and b.level=@level-1

endreturn

endgo

--呼叫函式查詢002及其所有子節點

select a.*

from tb a,f_cid('002') b

where a.id=b.id

/*--結果

id   pid  name       

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

002  001  煙台市

004  002  招遠市

--*/

查詢指定節點的所有子節點的示例函式 sql

測試資料 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 招遠市 uni...

查詢指定節點的所有父節點的示例函式 sql

create function f pid id char 3 returns t level table id char 3 level int asbegin declare level int set level 1 insert t level select id,level while r...

查詢指定節點及其所有子節點的函式

測試資料 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 招遠市 uni...