杂七杂八!

C# .Net Sql AD Flash Javascript Ajax
树形结构的处理--自定义函数--获取编码累计、级别深度

  --数据结构   
  表名tb,如果修改表名,则相应修改所有数据处理中涉及到的表名tb  
  id为编号(标识字段+主键)  
  pid为上级编号  
  name为名称,后面可以自行增加其他字段.

 

--自定义函数--获取编码累计  
  create   function   f_getmergid(@id   int)  
  returns   varchar(8000)  
  as  
  begin  
  declare   @re   varchar(8000),@pid   int  
   
  --为了数字排序正常,需要统一编码宽度  
  declare   @idlen   int,@idheader   varchar(20)  
  select   @idlen=max(len(id))  
  ,@idheader=space(@idlen)  
  from   tb  
   
  --得到编码累计  
  set   @re=right(@idheader+cast(@id   as   varchar),@idlen)  
  select   @pid=pid   from   tb   where   id=@id  
  while   @@rowcount>0  
  select   @re=right(@idheader+cast(@pid   as   varchar),@idlen)+','+@re  
  ,@pid=pid   from   tb   where   id=@pid  
  return(@re)  
  end  
  go  

 

/*--   得到级别   --*/  
  create   function   f_getidlevel(@id   int)  
  returns   int  
  as  
  begin  
  declare   @re   int,@pid   int  
  set   @re=1  
   
  --得到级别(深度)  
  select   @pid=pid   from   tb   where   id=@id  
  while   @@rowcount>0  
  select   @re=@re+1  
  ,@pid=pid   from   tb   where   id=@pid  
  return(@re)  
  end  
  go  
   
  --调用  
  select   *,dbo.f_getidlevel(id)   from   tb

posted on 2009-01-08 10:45  acheng  阅读(309)  评论(0编辑  收藏  举报