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

2022-02-11 20:23:18 字數 1130 閱讀 6611

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   ,'青島市'

union all select 5,null,'四會市'

union all select 6,5   ,'清遠市'

union all select 7,6   ,'小分市'

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

create trigger tr_deletenode on tb

for delete

asif @@rowcount=0 return --如果沒有滿足刪除條件的記錄,直接退出

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

declare @t table(id int,level int)

declare @level int

set @level=1

insert @t select a.id,@level

from tb a,deleted d

where a.pid=d.id

while @@rowcount>0

begin

set @level=@level+1

insert @t select a.id,@level

from tb a,@t b

where a.pid=b.id

and b.level=@level-1

enddelete a

from tb a,@t b

where a.id=b.id

go--刪除

delete from tb where id in(2,3,5)

select * from tb

/*--結果

id          pid        name

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

1           null      山東省

--*/

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

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

同步刪除被刪除節點的所有子節點 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...