SQL 2000和2005 樹形遞迴法小彙總 收藏

2021-05-22 16:38:19 字數 3426 閱讀 2614

--

測試資料

ifobject_id('

tb') is

notnull

drop

table

tb go

create

table

tb(id

char(3

),pid

char(3

),name

nvarchar(10

))insert

tb select

'001',

null,'

山東省'

union

allselect

'002',

'001',

'煙台市

'union

allselect

'004',

'002',

'招遠市

'union

allselect

'003',

'001',

'青島市

'union

allselect

'005',

null,'

四會市'

union

allselect

'006',

'005',

'清遠市

'union

allselect

'007',

'006',

'小分市'go

--2000的方法

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

create

function

f_cid(

@idchar(3

))returns

@t_level

table

(id

char(3

),level

int)

asbegin

declare

@level

intset

@level=1

insert

@t_level

select

@id,

@level

while

@@rowcount

>

0begin

set@level

=@level+1

insert

@t_level

select

tb.id,

@level

from

tb join

@t_level

t on

tb.pid

=t.id

where

t.level+1

=@level

endreturn

endselect

tb.*

from

tb join

dbo.f_cid(

'002

') b

ontb.id

=b.id

/*id   pid  name

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

002  001  煙台市

004  002  招遠市

*/go

--2005的方法(cte)

declare

@nvarchar(10

)set@n=

'002

';with

jidian as(

select

*from

tb whereid=

@nunion

allselectt.*

from

jidian j

join

tb t

onj.id

=t.pid

)select

*from

jidian

go/*

id   pid  name

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

002  001  煙台市

004  002  招遠市

*/go

--查詢指定節點的所有父節點(標準樹形,即乙個子節點只有乙個父節點)

create

function

f_pid(

@idchar(3

))returns

@t_level

table

(id

char(3

))as

begin

insert

@t_level

select

@idselect

@id=

pid

from

tbwhereid=

@idand

pid

isnot

null

while

@@rowcount

>

0begin

insert

@t_level

select

@idselect

@id=

pid

from

tbwhereid=

@idand

pid

isnot

null

endreturn

endselect

tb.*

from

tb join

dbo.f_pid(

'004

') b

ontb.id

=b.id

/*id   pid  name

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

001  null 山東省

002  001  煙台市

004  002  招遠市

*/go

--2005的方法

declare

@nvarchar(10

)set@n=

'004';

with

fujidian as(

select

*from

tb whereid=

@nand

pid

isnot

null

union

allselecta.*

from

tb a

join

fujidian f

ona.id

=f.pid

)select

*from

fujidian

order

byid

/*id   pid  name

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

001  null 山東省

002  001  煙台市

004  002  招遠市

*/

Sql2000和Sql2005共存安裝詳細過程

在安裝了sql2000的基礎上安裝sql2005的詳細過程 sql2005版本 sql2005開發版,兩張cd的那種 作業系統 window 2003 server 假設您的電腦已安裝了sql2000,下面開始安裝sql2005。一 執行光碟1 跳過 準備 步驟,直接進行 伺服器元件 工具 聯機叢書...

SQL2005的資料轉成SQL2000

直接restore或附加應該是不行的,用指令碼 導資料肯定沒有問題。2005轉到2000的步驟 1.生成for 2000版本的資料庫指令碼 2005 的manger studio 開啟 物件資源管理器 沒有的話按f8 連線到你的例項 右鍵要轉到2000的庫 任務 生成指令碼 在 指令碼嚮導 的 選擇...

SQL2000和SQL2005的行轉列處理方法

select show id year n1 n2 n3 n4 n5 from datapass db dbo test 1 sql2005中的列轉行.select show id mon,subtotal from datapass db dbo test unpivot subtotal for...