zwei1121

博客园 首页 新随笔 联系 订阅 管理
http://www.cnblogs.com/keepfool/archive/2012/02/05/2338700.html
 
 CREATE   function  F_ContactAllParentPlaceByClassID
(  
   @classID varchar(15) --参数
)
returns varchar(500)
as
begin

declare @ParentClassID varchar(15) --变量父ID
declare @Place varchar(500)    --变量Place
set  @Place = '' 
--首先根据传入的ClassID获取其父ID,ParentClassID
 SELECT    @ParentClassID = pid  FROM aaa 
    where  id = @classID
/*到此,我们得到 其父ID 例如 C18 我们可以得到 C12 但问题还没有完,
  C12本身也还有父节点,即C2。我们还需要将C2取出,C2的父节点为000即为根节点。
  至此结束。
  因此,由此问题可以看出,这是一个递归过程,根据指定ClassID获取其父ID。再
  根据父ID继续获取父ID的父ID,一直递归,直至父ID为000为止!
  因此下面实现SQL函数的递归 ,注意看
*/
if (@ParentClassID <> '0')--如果不是根节点
begin            
    -- 再将@ParentClassID父ID作为ClassID传入 进行自调用
     set @Place =  dbo.F_ContactAllParentPlaceByClassID(@ParentClassID) +'_' +@ParentClassID
    
end
    return  @Place
END
posted on 2014-05-14 16:36  zwei  阅读(166)  评论(0)    收藏  举报