比较通用的ID,ParentID结构表,返回树路径。

/*
zqonline
2009-04-21
获取提定ID的路径

调有方法:
declare @path nvarchar(4000)
exec p_Common_TreePath  'tb_dir','id','parentid','\',8,@path output
select @path
*/
CREATE PROCEDURE p_Common_TreePath 
    
@tablename nvarchar(200)      --数据表名称
    ,@IDName nvarchar(100)        --ID字段名称
    ,@ParentIDName nvarchar(100)    --ParentID字段名称
    ,@PathSeparator nvarchar(10)    --路径分隔符
    ,@IDValue nvarchar(100)        --待查询的ID值
    ,@Path nvarchar(4000) output    --输出父路径
AS


declare @sql nvarchar(4000)
set @path=''

set @sql='
declare @id nvarchar(100)
declare @parentID nvarchar(100)
set @parentID=
'''+@IDValue+'''
while 1=1
begin
 select @id=
'+@IDName+',@parentID='+@ParentIDName +' from '+@tablename+' where '+ @IDName+'=@parentID
 if @@rowcount=0
    begin
        break
    end

 if  len(@path)>0
    begin
    set @path=
'''+@PathSeparator+'''+@path
    end
set @path=convert(varchar,@id)+@path    

end
'

declare @parPath nvarchar(4000)
set @parPath='@path nvarchar(4000) output'
execute sp_executesql @sql,@parPath,@path=@path output

set @path=isnull(@path,'')

return 0


GO

posted on 2009-04-21 17:16  zqonline  阅读(814)  评论(0编辑  收藏  举报

导航