享受生活,享受学习

导航

读取树数据SQL

 --生成测试数据  
  create   table   BOM(ID   INT,PID   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   VARCHAR(10),PID   VARCHAR(10),Level   INT)  
  as  
  begin  
          declare   @i   int,@ret   varchar(8000)  
          set   @i   =   1  
          insert   into   @t   select   ID,PID,@i   from   BOM   where   PID   =   @ID  
           
          while   @@rowcount<>0  
          begin  
                  set   @i   =   @i   +   1  
                   
                  insert   into   @t    
                  select    
                          a.ID,a.PID,@i    
                  from    
                          BOM   a,@t   b    
                  where    
                          a.PID=b.ID   and   b.Level   =   @i-1  
          end  
          return  
  end  
  go  
   
  --执行查询  
  select   *   from   dbo.f_getChild(0)  
  go  
   
  --输出结果  
  /*  
  5  
  6  
  7  
  */  
   
  --删除测试数据  
  drop   function   f_getChild  
  drop   table   BOM

posted on 2007-05-11 17:33  徘徊中的海鸟  阅读(242)  评论(0编辑  收藏  举报