在cnblogs上的专栏

导航

树型结构数据,求某结点的所有父结点的自定义函数

           /*树型结构数据,求某结点的所有父结点的自定义函数*/
CREATE FUNCTION  f_father(@dpcode varchar(9)) 
RETURNS  @new table([dpcode] [varchar] (9)  ,     --结点编码
 [dpname] [varchar] (20) ,  --结点名称
 [dpcode_p] [varchar] (9) --此结点的父结点编码
)  AS 
BEGIN
declare @temp table([dpcode] [varchar] (9)  ,     --结点编码
 [dpname] [varchar] (20) ,  --结点名称
 [dpcode_p] [varchar] (9)   --此结点的父结点编码
)  --数据临时存放表
declare @t table([dpcode] [varchar] (9)  ,     --结点编码
 [dpname] [varchar] (20) ,  --结点名称
 [dpcode_p] [varchar] (9)   --此结点的父结点编码
)   --中间临时表
declare @tt table([dpcode] [varchar] (9)  ,     --结点编码
 [dpname] [varchar] (20) ,  --结点名称
 [dpcode_p] [varchar] (9)   --此结点的父结点编码
)  --中间交换临时表


delete   @temp
delete  @t
delete @tt
delete  @new


insert into @temp select DPTCODE, DPTNAME, DPTCODE_P  from base_dept   
  insert into @t  select * from @temp where dpcode=@dpcode 
  insert into @new  select * from @t  --结果临时表
  while ( 1=1)
  
    begin
    if (exists(select * from @t where dpcode ='001'))  --当为根时,停止循环
     begin
       break
     end   
      insert into @tt select * from @t --中间交换临时表
      delete @t
      insert into @t select * from @temp where dpcode in
        (select dpcode_p from @tt)
      delete @tt
      insert into @new select * from @t  
   end
  --insert into @new select * from @temp where dpcode=@dpcode 

return
END

posted on 2006-11-07 17:12  Double_  阅读(339)  评论(1编辑  收藏  举报