一个函数
一个表三个字段id,fid,name 
 create   table   t1   (iID   int   primary   key   identity(1,1),iFID   int   ,vName   varchar(20))   
 insert   into   t1(iFID,vName) 
 select   null, 'A ' 
 union    
 select   null, 'B ' 
 union    
 select   null, 'C ' 
 union 
 select   1, 'A1 ' 
 union    
 select   2, 'B1 ' 
 union    
 select   1, 'A2 ' 
 union 
 select   4, 'A1-a ' 
 比如传入一个1如何返回A2和A1-a这两个值 
------解决方案--------------------再修正个细节   
 alter function fn_nod( 
 @id int 
 ) 
 returns @r table ( 
 iID int,iFID int ,vName varchar(20),lev int)          --返回的字段可以在这里定义 
 as 
 begin 
     --先查询所有子节点 
     declare @lev int 
     set @lev=1 
     insert @r select iid,ifid,vname,@lev from t1 where ifid=@id 
     while exists (select 1 from t1 where ifid in (select iid from @r where lev=@lev)) 
        begin 
          insert @r select iid,ifid,vname,@lev+1 from t1 where ifid in (select iid from @r where lev=@lev) 
          set @lev=@lev+1 
        end 
     --再删除非叶子阶段 
     delete a 
     from @r a 
     where exists ( 
     select 1 from @r where ifid=a.iid  
     ) 
     return 
 end 
 go   
 --调用 
 select * from dbo.fn_nod(1)   
 --结果 
 iID         iFID        vName                lev          
 ----------- ----------- -------------------- -----------  
 5           1           A2                   1 
 7           4           A1-a                 2   
 (所影响的行数为 3 行)