遞迴用函式 儲存過程實現的效果

2022-09-15 07:03:12 字數 3084 閱讀 6245

--測試

create

table

ta (

專案varchar

(20),

上級專案

varchar

(20),

num int

)insert

taselect

'a','',

100 union all

select

'b',

'a',

200 union all

select

'c',

'b',

300 union all

select

'd',

'b',

400 union all

select

'e',

'c',

500 union all

select

'f',

'd',

600 union all

select

'h',

'e',

700 union all

select

'g',

'f',

800--

如果要顯示上級的專案

:create

function

roy_f(@專案

varchar

(20))

returns

varchar

(100)

asbegin

declare

@上級專案

varchar

(20)

select

@上級專案

=上級專案

from

ta where專案=

@專案return

case

when

@上級專案

isnull

then

null

else

isnull

(dbo.

roy_f(

@上級專案

)+'-',''

)+@專案end

end--

如果顯示各級專案的彙總金額

:create

function

roy_f2(@專案

varchar

(20))

returns

intas

begin

declare

@tb table(專案

varchar

(20),

上級專案

varchar

(20),

num int

,lev int

)declare

@i int

,@sum int

set @i=

0insert

@tb select

*,@i from

ta where專案=

@專案while

@@rowcount

>

0begin

set @i=

@i+1

insert

@tbselect

a.*,

@ifrom

ta a,

@tb b

where

b.專案=a.

上級專案

andb.

lev=

@i-1

endselect

@sum=

sum(

num)

from

@tbreturn

@sum

end--測試:

select專案,

金額=dbo.

roy_f2(

專案),關係=

dbo.

roy_f(專案)

from

ta/*

專案金額

關係-------------------- -----------

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

a3600ab

3500

a-bc

1500

a-b-c

d1800

a-b-d

e1200

a-b-c-e

f1400

a-b-d-f

h700

a-b-c-e-h

g800

a-b-d-f-g

(所影響的行數為

8 行)

*/--

用儲存過程統計

:create

proc

roy_p @

專案varchar

(20)

asbegin

declare

@i int

set@i=

0select

*,級數

=@i into

#from

ta where專案=

@專案while

@@rowcount

>

0begin

set@i=

@i+1

insert

#select

ta.*,級數=

@ifrom

ta,# b

where

ta.上級專案=b.

專案and

b.級數

=@i-

1end

select

[sum]=

sum(

num)

from

#end

--測試

:exec

roy_p 'a'

/*sum

-----------

3600

(所影響的行數為

1 行)

*/--

刪除測試

:drop

function

roy_f,

roy_f2

drop

proc

roy_p

drop

table

ta

用儲存過程實現翻頁

use card db go object storedprocedure dbo pr get star user list v2 script date 03 05 2010 15 27 18 set ansi nulls on goset quoted identifier on go 查詢s...

用棧實現Fibnacci遞迴過程的非遞迴演算法

include include using namespace std 模擬遞迴工作棧。data表示當前狀態的引數值 state表示當前棧的完成狀態,state 2 表示未計算,state 1 表示計算了遞迴樹左部,state 0 表示計算了整個遞迴子樹 struct stacknode stack...

mysql儲存過程實現遞迴查詢

建表 create table organization orgcode varchar 40 not null primary key comment 機構編號 parentcode varchar 40 comment 父機構編號 orgname varchar 100 comment 機構名稱...