sql 儲存過程 層次 樹形結構

2021-04-14 15:48:33 字數 2602 閱讀 5806

用sql儲存過程生成樹形結構資料表。

建立表:

create table table_newsclass

(newsclassname varchar(50),

newsclassid int,newsclassparentid int

)insert into table_newsclass

select '頂級欄目',  1,     0  union all

select '欄目一' , 2,     1 union all

select '欄目二'  ,3,     1 union all

select '欄目三', 4,     2 union all

select 'sfg001' ,5,     2 union all

select 'sfg002' ,6,     3 union all

select 'sfg002' ,7,     3 union all

select 'sfg002' ,8,     2 union all

select 'sfg003' ,9,     3 union all

select 'wip001' ,10,     2 union all

select 'wip001' ,11  ,   2 union all

select 'wip002' ,12  ,   3 union all

select 'wip003' ,22 ,   1 union all

select 'wip003' ,23  ,   1 union all

select 'raw001',21,      25 union all

select 'raw004',23,      4 union all

select 'kkk001',25,      23

建立函式

set ansi_nulls on

set quoted_identifier on

go--返回指定樹形結構表

alter function [dbo].[f_gettree](@parent int)

returns @t table(newsclassname nvarchar(50),parent int,child int,level int,sort nvarchar(1000) collate latin1_general_bin)

asbegin

declare @level int

set @level=1

insert into @t

select newsclassname,newsclassparentid,newsclassid ,@level,convert(nvarchar(10),newsclassparentid)+convert(nvarchar(10),newsclassid)

from table_newsclass

where convert(nvarchar(10),newsclassparentid)=convert(nvarchar(10),@parent) collate latin1_general_bin

while @@rowcount>0

begin

set @level=@level+1

insert @t

select a.newsclassname,a.newsclassparentid,a.newsclassid,@level,b.sort+'-'+convert(nvarchar(10),newsclassid)

from   table_newsclass a ,@t b

where convert(nvarchar(10),a.newsclassparentid)=convert(nvarchar(10),b.child)  collate latin1_general_bin and b.level=@level-1

endreturn

end呼叫函式

select child as  newsclassid,

space(level*2)+'|--' + newsclassname as newsclassname  from dbo.f_gettree(0) order by sort

返回結果

1   |--頂級欄目

2     |--欄目一

22     |--wip003

10       |--wip001

11       |--wip001

4       |--欄目三

23         |--raw004

25           |--kkk001

21             |--raw001

5       |--sfg001

8       |--sfg002

23     |--wip003

25       |--kkk001

21         |--raw001

3     |--欄目二

12       |--wip002

6       |--sfg002

7       |--sfg002

9       |--sfg003

是你想要的結果麼?

嘿嘿!

mysql 樹形結構查詢(儲存過程)

就用資料資料庫表位址資料 中國地區 來說吧 用windows 請使用 gbk 可直接執行 去除註解 儲存過程 delimiter drop procedure if exists findlchild iid 遞迴父節點 layer 允許遞迴深度 create procedure findlchil...

sql樹形結構

create temporary table treeview id varchar 20 org name varchar 20 parent org id varchar 20 org code varchar 20 insert into treeview id,org name,parent...

資料庫儲存層次 樹形結構的標準做法

標準做法有3種 1 最早的做法 節點id裡包括完整路徑 曾祖父id 爺id 父id 本id 財務的會計科目編號就是這麼做的 現在基本很少使用了 2 遞迴做法 父id,本id 更早 完整的關係提供遞迴才能得到 目前比較普遍 好處是直觀簡單,增刪方便 壞處是生成樹需要遞迴 3 直接儲存法 本id,根id...