【问题标题】:Querying hierarchical folder information for all rows in a table查询表中所有行的分层文件夹信息
【发布时间】:2021-06-02 18:25:58
【问题描述】:

我们有一个旧的数据库应用程序,其中包含一个表示文件夹结构的表。我的用例与这个旧的 post 中的用例非常相似,除了我需要能够返回我的表中所有行的文件夹路径信息,这相当小(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

【问题讨论】:

    标签: sql sql-server-2000


    【解决方案1】:

    您的 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 
    ...
    

    【讨论】:

    • 感谢您的指导。尝试左连接的建议奏效了,尽管有几个路径下降了 11 级,所以输出有点难以阅读,即使在排除空值之后也是如此。我再次尝试使用我的原始代码,将“@counter”替换为“@folderid”,这似乎工作得更好,但仍然没有返回有效数据。如何设置变量以提取实际数据?任何要审查的指导或资源都会很棒。谢谢。
    • 哦,我在想,作为一次性操作,您可能会将这些路径拉入文本编辑器(选择所有结果网格,复制,粘贴)并找到 Replace NULL with nothing.. 你还不清楚您期望的输出,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    相关资源
    最近更新 更多