sql删除树节点 及其子节点的全部(存储过程,游标,递归)

删除父节点及父节点之下的全部节点

比如删除节点为3,将递归删除其下的全部节点6,11,12

 

 

表里面需要创建ID ,PID TID用处以后对树的复制操作 表格式如图所示:

PID用于存放节点的值 name存放内容 ID自动增长

0节点存在ID为1的节点 1节点下存在ID为2,3的节点 依次类推....

 

 递归删除节点:

 

create proc DelereNote
(
	@id int--定义要删除树节点
)
as
begin
	 declare @childID int--声明变量
	 declare cursors cursor local for select 表ID from 表 where 对应ID=@id--local关键字 全局游标
	 open cursors
	  fetch next from cursors into @childID--取游标的值赋给变量
	  while(@@FETCH_STATUS=0)--判断当前游标内是否存在值
	  begin 
		exec DelereNote @childID--递归调用存储过程 把孩子节点的值赋给游标 递归调用
		fetch next from cursors into @childID--继续读取游标里面的内容
	  end  
	  close cursors
	  deallocate cursors
	delete from 表 where 表ID=@id--存储过程执行的删除方法
end
go 

exec DelereNote 2--调用储存过程对于递归调用不很容易理解 需要多加练习

 

查看某个节点下所有节点

 

with myT2 as(
select * from System_Column Where Column_ID=10
 union all 
select System_Column.* from myT2 inner join System_Column on myT2.Column_ID=System_Column.Column_Aid)
select * from myT2


 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值