我有以下表结构来存储文件和文件夹层次结构。
FolderInfo
桌子
Id (key)
Name
ParentFolderId (nullable)
和
File
桌子
FileId(key)
FileName
FolderId
FolderInfo
表有一个 ParentFolderId
,它是其自身 id 的外键。根文件夹的 ParentFolderId
中有一个空值,所有其他记录都通过它引用其父记录。
我想生成一个结果,其中包含所选文件及其在层次结构中的完整路径。
结果
File
Location
我需要使用一些智能 T-SQL 来实现这一点。如果有人可以展示基于通用表表达式的方法来递归地向上遍历层次结构,我将非常欢迎。
为了获取单个文件的路径,您将使用以下形式的递归 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) 变量。
这将为您提供一个良好的开始,但可能需要一些调整。