實現刪除指定節點及所有子結點的處理觸發器

2022-05-21 15:33:10 字數 1555 閱讀 1269

create

table

tb(id

int,pid

int,name

nvarchar(10

))insert

tb select1,

null,'

山東省'

union

allselect2,

1,'煙台市

'union

allselect4,

2,'招遠市

'union

allselect3,

1,'青島市

'union

allselect5,

null,'

四會市'

union

allselect6,

5,'清遠市

'union

allselect7,

6,'小分市'go

--刪除處理觸發器(同步刪除被刪除節點的所有子節點)

create

trigger

tr_deletenode

ontb

fordelete

asif

@@rowcount=0

return

--如果沒有滿足刪除條件的記錄,直接退出

--查詢所有被刪除節點的子節點

declare

@ttable

(id

int,

level

int)

declare

@level

intset

@level=1

insert

@tselect

a.id,

@level

from

tb a,deleted d

where

a.pid

=d.id

while

@@rowcount

>

0begin

set@level

=@level+1

insert

@tselect

a.id,

@level

from

tb a,@tb

where

a.pid

=b.id

andb.

level

=@level-1

enddelete

afrom

tb a,@tb

where

a.id

=b.id

go--

刪除delete

from

tb where

id in(2

,3,5

)select

*from

tb/*

--結果

id pid name

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

1 null 山東省

--*/

實現刪除指定結點及所有子節點的處理觸發器 sql

create table tb id int,pid int,name nvarchar 10 insert tb select 1,null,山東省 union all select 2,1 煙台市 union all select 4,2 招遠市 union all select 3,1 青島市...

同步刪除被刪除節點的所有子節點 BOM節點刪除

create table tb id int,pid int,name nvarchar 10 insert tb select1,null,山東省 union allselect2,1,煙台市 union allselect4,2,招遠市 union allselect3,1,青島市 union ...

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

測試資料 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...