日期:2014-05-18  浏览次数:20607 次

如何删除一个节点及其下面的所有子节点?
---测试数据
if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N '[dbo].[table1] ')   and   OBJECTPROPERTY(id,   N 'IsUserTable ')   =   1)
drop   table   [dbo].[table1]


create   Table   table1(
                                        fdId   varchar(50),  
                                        fdName     varchar(50),
                                        fdFatherId   varchar(50),
                                        fdLevel   varchar(50)
                                          )

insert   into   table1   select   '1 ', '全部产品 ', '0 ', '0 '  
insert   into   table1   select   '2 ', '家电产品 ', '1 ', '1 '  
insert   into   table1   select   '3 ', '小家电 ', '2 ', '2 '  
insert   into   table1   select   '4 ', '空调系列 ', '2 ', '2 '
insert   into   table1   select   '5 ', '格力空调 ', '4 ', '3 '    
insert   into   table1   select   '6 ', '冰箱系列 ', '2 ', '2 '  
insert   into   table1   select   '7 ', '床上用品 ', '1 ', '1 '  

select   *   from   table1


/*
fdId         fdName     fdFatherId     fdLevel
1 全部产品 0 0
2 家电产品 1 1
3 小家电 2 2
4 空调系列 2 2
5 格力空调 4 3
6 冰箱系列 2 2
7 床上用品 1 1

fdId为该物品类的编号
fdName为名称
fdFatherId为所属父节点编号
(即属于在那个fdId之下)
fdLevel为在TreeView所属的等级


对应的TreeView显示是这样的

全部产品
      --家电产品
              --小家电
              --空调系列
                            --格力空调
              --冰箱系列
      --床上用品                        
     

问题:怎么删除一个节点,其下级所有子节点都删除呢?

如删除家电产品:哪么就要删除:家电产品,小家电,空调系列,格力空调,冰箱系列

这个算法sql语句怎么写呀,我是用delphi的,写成delphi或sql存储过程都行

*/

------解决方案--------------------
--生成测试数据
create table BOM(ID INT,Topic_ID INT,MSG VARCHAR(1000))
insert into BOM select 1,0,NULL
insert into BOM select 2,1,NULL
insert into BOM select 3,1,NULL
insert into BOM select 4,2,NULL
insert into BOM select 5,3,NULL
insert into BOM select 6,5,NULL
insert into BOM select 7,6,NULL
go

--创建用户定义函数
create function f_getChild(@ID VARCHAR(10))
returns @t table(ID VARCH