使用通用表表达式进行递归自下而上查询

问题描述 投票:0回答:1

我有以下表结构来存储文件和文件夹层次结构。

FolderInfo
桌子

Id (key)
Name
ParentFolderId (nullable)

File
桌子

FileId(key)
FileName
FolderId

FolderInfo
表有一个
ParentFolderId
,它是其自身 id 的外键。根文件夹的
ParentFolderId
中有一个空值,所有其他记录都通过它引用其父记录。 我想生成一个结果,其中包含所选文件及其在层次结构中的完整路径。

结果

File
Location

我需要使用一些智能 T-SQL 来实现这一点。如果有人可以展示基于通用表表达式的方法来递归地向上遍历层次结构,我将非常欢迎。

sql-server tsql recursive-query
1个回答
4
投票

为了获取单个文件的路径,您将使用以下形式的递归 CTE:


with folderPath as (
  select Id, ParentFolderId, Name 
     from FolderInfo
    where Id = @FileFolderId
  union all select p.Id, p.ParentFolderId, p.Name 
     from  folderPath p
    join FolderInfo fi on  fi.Id = p.ParentFolderId
)
select @FullFolderPath += '/' +Name from   folderPath
其中 @FileFolderId 是您想要其路径的文件的 Id 值,@FullFolderPath 是用于聚合路径的 varchar(8000) 变量。

这将为您提供一个良好的开始,但可能需要一些调整。

© www.soinside.com 2019 - 2024. All rights reserved.