递归树处理.

原贴:

http://community.csdn.net/Expert/topic/4536/4536413.xml?temp=.2449457

表中有两个字段:

子  父
A   null
B   A
C   B
D   C
E   C

我的目的是:怎样根据一个父级条件,就把包括父级在内的所有子级查询出来?

比如:

父级条件是“B”,结果应该是:
子  父
B   A
C   B
D   C
E   C

父级条件是“C”,结果应该是:
子  父
C   B
D   C
E   C

注意:子级数没有限制,可以任意有任意数目的子级。

 

--测试环境
Create table Test(子 varchar(10),父 varchar(10))
insert into Test select 'A',NULL
union all select 'B','A'
union all select 'C','B'
union all select 'D','C'
union All select 'E','C'
--建函数
CREATE Function F_Tree(@父 varchar(10))
returns @t table(子 varchar(10),父 varchar(10),level int)
begin
declare @i int
set @i=1
  insert @t select *,@i from Test where 子=@父
  while @@rowcount<>0
  begin
  set @i=@i+1
  insert @t select a.*,@i from Test a,@t b
  where b.子=a.父 and b.level=@i-1
  end
 return
end
--查询

select 子,父 from dbo.F_Tree('B')
select 子,父 from dbo.F_Tree('C')

--结果
子          父         
---------- ----------
B          A
C          B
D          C
E          C

(4 row(s) affected)

子          父         
---------- ----------
C          B
D          C
E          C

(3 row(s) affected)

--删除环境
Drop table Test
Drop function F_Tree

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值