求助:递归查询难题?
表名称T_DB_DirMgt
字段名 : pDirID int ---- 上级目录ID
DirID int ----- 目录ID
DirName varchar(100) ------ 目录名称
表名称T_DB_DirMgt 的数据如下:
目录id 目录名称 上级目录ID
122 jkljkljkljkl 0 ---代表根目录
123 hjkghjkgh 122
124 436545 122
125 ftrhyre 124
126 t5uy54 124
127 truytyu 124
128 gjmmtr 124
129 435 124
130 ret 129
132 567YTU 129
133 GFHJ 129
134 HGJ 132
135 GFJ 132
136 ,MBVMJHVJ 134
我想达到以下效果:
目录名称 :由类似 “父目录名称\上级目录名称\目录名称” 这个种形式组成。
jkljkljkljkl
jkljkljkljkl\hjkghjkgh
jkljkljkljkl\436545
jkljkljkljkl\436545\ftrhyre
jkljkljkljkl\436545\t5uy54
jkljkljkljkl\436545\truytyu
jkljkljkljkl\436545\gjmmtr
jkljkljkljkl\436545\435
jkljkljkljkl\436545\435\ret
jkljkljkljkl\436545\435\567YTU
jkljkljkljkl\436545\435\GFHJ
jkljkljkljkl\436545\435\567YTU\HGJ
jkljkljkljkl\436545\435\567YTU\GFJ
jkljkljkljkl\436545\435\567YTU\HGJ\,MBVMJHVJ
要怎么样来写一个过程函数,或存储过程,返回“由类似 “父目录名称\上级目录名称\目录名称” 这个
种形式组成”结果
我试用递归查询,如下:
/******************************************************************/
CREATE FUNCTION dbo.FC_SYS_DirMgt_UpSubTree(
/*******************************************************************************************
**********************
* 功能:取得当前目录所有子目录
* 参数:@DirID------目录ID
* 返回:含有取得当前目录所有详细从父目录到子目录的一张表
* 作者:wuty
********************************************************************************************
********************/
@DirID AS int
)
RETURNS @treeinfo table(
[DirID] int NOT NULL,
[DirName] varchar(500) NOT NULL,
[pDirID] int NOT NULL,
[level] int NOT NULL
) AS
BEGIN
DECLARE @level AS int
SELECT @level = 0
If @DirID = '0'
INSERT INTO @treeinfo
SELECT [DirID],[DirName],[pDirID],@level
FROM [T_DB_DirMgt]
WHERE pDirID = @DirID
else
INSERT INTO @treeinfo
SELECT [DirID],[DirName],[pDirID],@level
FROM [T_DB_DirMgt]
WHERE DirID = @DirID
WHILE @@ROWCOUNT > 0
BEGIN
SET @level = @level + 1
INSERT INTO @treeinfo
SELECT E.[DirID],T.[DirName]+'\'+E.[DirName],E.[pDirID],@level
FROM [T_DB_DirMgt] AS E JOIN @treeinfo AS T
ON E.[pDirID] = T.[DirID] AND T.[level] = @level - 1
END
RETURN
END
/**********************************************************************/
以上若取select * from dbo.FC_SYS_DirMgt_UpSubTree('122')
可以达到以上效果,
jkljkljkljkl
jkljkljkljkl\hjkghjkgh
jkljkljkljkl\436545
jkljkljkljkl\436545\ftrhyre
jkljkljkljkl\436545\t5uy54
jkljkljkljkl\436545\truytyu
jkljkljkljkl\436545\gjmmtr
jkljkljkljkl\436545\435
jkljkljkljkl\436545\435\ret
jkljkljkljkl\436545\435\567YTU
jkljkljkljkl\436545\435\GFHJ
jkljkljkljkl\436545\435\567YTU\HGJ
jkljkljkljkl\436545\435\567YTU\GFJ
jkljkljkljkl\436545\435\567YTU\HGJ\,MBVMJHVJ
但是我若执行select * from dbo.FC_SYS_DirMgt_UpSubTree('129')结果如下:
目录id 目录名称 上级目录ID
129 435 124
130 435\ret 129
132 435\567YTU 129
133 435\GFHJ 129
134 435\567YTU\HGJ 132
135 435\567YTU\GFJ 132
136 435\567YTU\HGJ\,MBVMJHVJ 134
====================
达不到以下效果:
jkljkljkljkl\436545\435
jkljkljkljkl\436545\435\ret
jkljkljkljkl\436545\435\567YTU
jkljkljkljkl\436545\435\GFHJ
jkljkljkljkl\436545\435\567YTU\HGJ
jkljkljkljkl\436545\435\567YTU\GFJ
jkljkljkljkl\436545\435\567YTU\HGJ\,MBVMJHVJ
但是我水平有限制达不到返回“由类似 “父目录名称\上级目录名称\目录名称” 这个种形式组成”
结果效果。
大家帮帮忙呀!