/*--按子找父--*/
--建立环境
declare @a table (TC_Id int,TC_PID int,TC_Name varchar(200))
insert @a values(1,0,'中国')
insert @a values(2,0,'美国')
insert @a values(3,0,'加拿大')
insert @a values(4,1,'北京')
insert @a values(5,1,'上海')
insert @a values(6,1,'江苏')
insert @a values(7,6,'苏州')
insert @a values(8,7,'常熟')
insert @a values(9,6,'南京')
insert @a values(10,6,'无锡')
insert @a values(11,2,'纽约')
insert @a values(12,2,'旧金山')declare @tmp1 table (TC_Id int,TC_PID int,TC_Name varchar(200))--开始结点
insert @tmp1 select * from @a where tc_ID=10--循环得到
while exists(select 1 from @a a,@tmp1 b where a.tc_id=b.tc_pID and a.tc_ID not in (select tc_ID from @tmp1))
  insert @tmp1 select a.* from  @a a,@tmp1 b where a.tc_id=b.tc_pID and a.tc_ID not in (select tc_ID from @tmp1)

解决方案 »

  1.   

    不是由子找父,而是先从树根开始遍历树,如果该节点没有数值,则进入该节点的第一个子节点,否则进入该节点的兄弟节点,如果没有兄弟,则访问该节点的父节点,直至访问到树根。
    我在倒数第五行已经设置了判断,如果该节点的父为空则应跳出if……else……体,
    但是到了根节点后,非常奇怪的是:它不但不跳出,反而跳到如下所述行(倒数第十五行):
    “  while (@order<@bronum) and (@order is not null)”
    我调试了很多次,就是不知道为什么,请各位帮忙解决这个问题!!