关于一个SQL删除语句的问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 11:53:29
我在数据库里建立了一个表,表的结构是 node fatherNode Level 对应节点,父节点,和层级。映射一个树的结构,问题是我要删除一个节点,如果能删除所有它的子节点和孙子节点,乃至无数层的子节点呢?用SQL语言实现。请教方家。
要删除所有祖先为该节点的子节点,是一个算法问题。

你把你的表再增加一个字段 LevelCode级次编码
如:
01
0101
010101
010102
01010201
0102
010201
这样你在做删除的时候,就非常容易处理了,比如我要删除0101的节点,那么只用delete from tablename where LevelCode like '0101%' 就可以把所有0101节点以下的记录都删除了。

DELETE....

用触发器,当父表中的记录被删除,自动删除子表中的数据

declare @i integer,@maxi integer,@j integer,@maxj integer
select @maxi=max(level) from T1

for @i=1 to @maxi
begin
delete T1 where node in (@node)
select IDENTITY(int, 1,1) as i,* into #t1 from T1 where fatherNode in (@node)
set @node =''
select @maxj =max(i) from #t1
for @j=1 to @maxj
begin
select @node=@node+node+',' from #t1
end
set @node=substring(@node,1,len(@node)-1)
drop #t1
end

这样应该可以,说不定会有语法错误,我没有试过,你试一下啊

charlif方法不错,不过这样就需要对原表进行很大的附加操作了