关于删除无限级数据问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 04:53:40
有这样数据表
1.id 编号
2.user 用户名
3.parent_id 上级编号(与ID建立从属的关系)

假设有以下几条数据
id user parentid
1 A 0
2 A1 1
3 A2 1
4 A3 1
5 B1 2
6 B2 2
……
现在我删除ID为1的数据,要求同时删除下属(parentid=1)的数据,并且删除下级想关联级的数据。。。。

如果原来数据没有断层的话可以这样写
delete yourtable where id=1
while @@rowcount>0
delete a from yourtable a where not exists(select 1 from yourtable where id=a.parentid) and parentid<>0

不过建议树形结构数据不要这样简单地设置数据结构
建议设置一个字段TreeID或FDNCode
记录树路径,可以是ID和.的组合 如 6这条记录是0.1.2,也可以是每个层级定长的字符(这样只能针对数据量不多的表),另外还要加上Grade或Level记录层级

这个得写一个递归函数了,一般的存储过程还实现不了,等会写好了发上来。
、、、、、、、、、、、、、、、、、、、、、、、、、、、
Create function dbo.FUNC_GET_Child(@area_id int,@level_num int =-1)
RETURNS @rt_table table(
ID int,
user nvarchar(50),
PID int
)
AS
BEGIN
declare @tep_name varchar(50),
@tep_id int,
@p_id int,
@sub_count int

declare c1 cursor for
(
select id,user,pid from table1 where pid = @area_id
)
if @level_num=0
begin
insert into