SQL Server樹型結構資料處理的儲存過程

2022-03-10 00:34:50 字數 3867 閱讀 2386

我們在平常的系統開發中常常會遇到像無限級分類這樣的樹型結構資料,現提供乙個可用的資料庫儲存過程,可以完成樹型結構資料的排序。

環境:windows7+sql server 2008

說明:下面**已經轉換成sql server2000的指令碼,處理效果如下,看sortname欄位結果,**經過測試。

建立樹型表

create

table

[dbo].

[categories](

[category_id][

int]

identity(1

,1) not

null,[

parent_id][

int]

null,[

category_name][

varchar](

500)

null

,constraint

[pk_categories

]primary

keyclustered([

category_id

]asc

) on

[primary])

on[primary]go

插入測試資料

insert

[dbo].

[categories](

[category_id],

[parent_id],

[category_name])

values(1

, 0, convert

(text

, n'a'

))insert

[dbo].

[categories](

[category_id],

[parent_id],

[category_name])

values(2

, 0, convert

(text

, n'b'

))insert

[dbo].

[categories](

[category_id],

[parent_id],

[category_name])

values(3

, 1, convert

(text

, n'aa'

))insert

[dbo].

[categories](

[category_id],

[parent_id],

[category_name])

values(4

, 3, convert

(text

, n'

aaa'

))insert

[dbo].

[categories](

[category_id],

[parent_id],

[category_name])

values(5

, 2, convert

(text

, n'bb'

))insert

[dbo].

[categories](

[category_id],

[parent_id],

[category_name])

values(6

, 1, convert

(text

, n'

aa2'

))insert

[dbo].

[categories](

[category_id],

[parent_id],

[category_name])

values(7

, 1, convert

(text

, n'

aa3'

))insert

[dbo].

[categories](

[category_id],

[parent_id],

[category_name])

values(8

, 3, convert

(text

, n'

aaa2'))

insert

[dbo].

[categories](

[category_id],

[parent_id],

[category_name])

values(9

, 4, convert

(text

, n'

aaa3'))

insert

[dbo].

[categories](

[category_id],

[parent_id],

[category_name])

values(10

, 2, convert

(text

, n'

bb2'

))

建立儲存過程,表中的level為級別深度,通過生成的臨時表與分類表關聯顯示結果。

create

procedure

[dbo].

[get_treedata]as

begin

--建立臨時表

create

table

#tmp_table (id

int,

[level

]int

)declare

@levelvalue

intset

@levelvalue=0

insert

#tmp_table

select0,

@levelvalue

--將資料寫入到臨時表

while

@@rowcount

>

0begin

set@levelvalue

=@levelvalue+1

insert

#tmp_table

select

a.category_id,

@levelvalue

from

categories

asa,#tmp_table

asb

where

a.parent_id=b.

[id]andb.[

level]=

@levelvalue-1

end--

select * from #tmp_table

select

a.category_id,a.parent_id,a.category_name,b.

[level

],

case

when

a.parent_id=0

then

a.category_name

else

replicate('

-',b.[

level])

+a.category_name

endas

sortname

from

categories

asa

join

#tmp_table

asb

ona.category_id

=b.id

order

bysortname

return

end

java 組裝樹型結構資料

自己開發遇到的後台組裝的樹結構方法,記錄下來 1 首先資料庫為oracle,使用 start with 語句和union 組裝要查詢資料 select from select equip.equip category id as id,equip.equip category name as nam...

資料結構(承) 樹型結構(一)

樹的定義 具有n n 0 個節點的有限非空集合,且有且只有乙個特定的節點成為根。節點 節點表示樹中的元素,包括資料項及若干指向子樹的分支。節點的度 節點所擁有的子樹的個數稱為該節點的度 degree 樹的度 樹中各節點度的最大值成為樹的度。葉節點 度為0的節點稱為葉節點。分支節點 度不為0的節點成為...

Trie樹 高階樹型結構

trie樹應用 trie 樹中文名叫字典樹 字首樹等等。這些名字暗示其與字元的處理有關,事實也確實如此,它主要用途就是將字串 當然也可以不限於字串 整合成樹形。它的核心思想就是通過最大限度地減少無謂的字串比較,使得查詢高效率,即 用空間換時間 再利用共同字首來提高查詢效率。典型應用於統計和排序大量的...