杂七杂八!

C# .Net Sql AD Flash Javascript Ajax
树形结构的处理--得到指定id的父id列表

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

 

/*--   得到指定id的父id列表   --*/  
  --不包含排序字段的情况  
  create   function   f_getparentid(@id   int)  
  returns   @re   table(id   int)  
  as  
  begin  
  declare   @pid   int  
  select   @pid=pid   from   tb   where   id=@id  
  while   @pid<>0  
  begin  
  insert   into   @re   values(@pid)  
  select   @pid=pid   from   tb   where   id=@pid  
  end  
  return  
  end  
  go  
   
  --包含排序字段的情况  
  create   function   f_getparentidsort(@id   int)  
  returns   @re   table(id   int,sortid   varchar(8000))  
  as  
  begin  
  --为了数字排序正常,需要统一编码宽度  
  declare   @idlen   int,@idheader   varchar(20)  
  select   @idlen=max(len(id))  
  ,@idheader=space(@idlen)  
  from   tb  
   
  declare   @pid   int,@sortid   varchar(8000)  
  select   @pid=pid,@sortid=right(@idheader+cast(pid   as   varchar),@idlen)  
  from   tb   where   id=@id  
  while   @pid<>0  
  begin  
  insert   into   @re values(@pid,@sortid)  
  select   @pid=pid,@sortid=right(@idheader+cast(pid   as   varchar),@idlen)  
  from   tb   where   id=@pid  
  end  
  return  
  end  
  go  
   
  --调用示例,显示9的所有父  
  select   a.*   from   tb   a   inner   join   dbo.f_getparentidsort(9)   b   on   a.id=b.id   order   by   b.sortid  

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