查询表中所有行的分层文件夹信息



我们有一个旧的数据库应用程序,其中有一个表表示文件夹结构。我的用例非常类似于这篇旧文章,除了我需要能够返回我的表中所有行的文件夹路径信息,这是相当小的(727条记录)。

在那篇文章中给出的函数,我试图对它进行逆向工程,以返回所有行的结果,但我显然在我的头上,因为我没有得到任何结果。

我正在尝试的代码如下。是的,只是确认一下,后端是SQL 2000。这个应用程序已经被忽略了一段时间,但我们现在终于要让它退役了,这就是为什么我要获取这个文件夹结构信息。感谢所有的帮助。谢谢。

USE MyDB
GO
DROP TABLE #FolderTemp
DECLARE @Counter INT
DECLARE @MaxId INT
DECLARE @FolderID INT
DECLARE @ParentID INT
DECLARE @FolderPath varchar(1000)
DECLARE @FolderName varchar(1000)
SELECT MYFOLDER_Id
, MYFOLDER_ParentId
, MYFOLDER_LogicalName 
INTO #FolderTemp FROM MYTABLE
Select @Counter = min(MYFOLDER_Id), @MaxId = max(MYFOLDER_Id)
FROM #FolderTemp
GROUP BY MYFOLDER_LogicalName
WHILE (@Counter IS NOT NULL
AND @Counter <= @MaxId)
BEGIN

SELECT MYFOLDER_ParentID = @ParentID, MYFOLDER_LogicalName = @FolderName, @FolderPath
FROM #FolderTemp
WHERE MYFOLDER_Id = @FolderID
((
select @FolderPath = MYFOLDER_LogicalName + '' + @FolderPath, @ParentID = MYFOLDER_ParentID
from #FolderTemp
where MYFOLDER_Id = @ParentID
))
PRINT @FolderPath + '' + @FolderName
SET @Counter  = @Counter  + 1        
END

你的while循环似乎增加了一个名为@counter的变量,但while中的查询使用了一个名为@folderid的变量,该变量从未被赋值,并且始终具有其默认值null

递归查询在sqlserver 2000中是很困难的工作。如果这是一次获取数据的操作,那么您可以做得比仅仅复制粘贴最深处路径所需的尽可能多的左连接更糟糕,例如

SELECT t0.name, t1.name, t2.name ...
FROM t t0
LEFT JOIN t t1 ON t1.parentid = t0.id 
LEFT JOIN t t2 ON t2.parentid = t1.id 
...

最新更新