Tree表如下:
NodeId ParentId NodeName
0 -1 一
1 0 二
9 1 三
10 9 四
12 10 五
18 1 六
已知:Nodeid 能得到 NodeName 的递归连接字符串吗?
例: 已知 结果
NodeId:10 四三二一
NodeId:18 六二一
NodeId:1 二一
解决方法:
1、创建表结构。
insert into Tree select 0 ,-1,'一'
insert into Tree select 1 ,0 ,'二'
insert into Tree select 9 ,1 ,'三'
insert into Tree select 10,9 ,'四'
insert into Tree select 12,10,'五'
insert into Tree select 18,1 ,'六'
go
2、构造函数。
returns varchar(8000)
as
begin
declare @ret varchar(8000),@ParentId int
set @ret = ''
select @ret=@ret+NodeName,@ParentId=ParentId from Tree where NodeId=@NodeId
while @@rowcount<>0
begin
set @NodeId=@ParentId
select @ret=@ret+NodeName,@ParentId=ParentId from Tree where NodeId=@NodeId
end
return @ret
end
go
3、调用函数,并显示结果。
go
结果如下:
NodeId ParentId NodeName Path
0 -1 一 一
1 0 二 二一
9 1 三 三二一
10 9 四 四三二一
12 10 五 五四三二一
18 1 六 六二一
4、删除表结构及函数。
drop table Tree
go