日期:2014-05-18  浏览次数:20509 次

怎样实现函数的循环调用
我有一张表a
id name des parentid path
1 张三 员工 null 张三
2 李四 员工 1 张三 >李四 
3 小花 职工 2 张三 >李四 > >小花
4 小明 职工 1 张三 > >小明

表结构显示为上面内容
我现在想做的是。当我知道某个parentid的时候找出这个记录的全路径。path字段表示。
例如:parentid等于2的时候它的path的表示"张三 >李四 > >小花".
我说明一下:当parentid =2时小花的的上级是李四(因为李四的id是2),然而李四又有parentid值为1,那么小花所在的全路径存在两个上级。
小花的path的值就是:张三 >李四 > >小花

我的实现过程是用函数的循环调用(也可以看成是递归)
SQL code

Create Table a
(id int identity(1,1), [name] varchar(50), des varchar(50), parentid int, [path] varchar(30))

insert a
select 'Zhang San', 'Employee', null, null
union all select 

但是不好使,无法实现效果,高手看看我的程序哪里有错误,还是数据库循环调用函数不支持?如果这样可以实现,怎么做?

------解决方案--------------------
一看很熟
up一下
------解决方案--------------------
alter function GetPath(@id int) 
returns varchar(30)
as
begin
declare @parentid int
declare @path varchar(30)
select @parentid=[parentid] from a where id= @id
select @path=[name] from a where id=@id
if @parentid is not null
set @path = dbo.GetPath(@parentid)+ '>' + @path 
return @path
end