我有以下表结构存储文件和文件夹层次结构。
FolderInfo
表
Id (key)
Name
ParentFolderId (nullable)
和
File
表
FileId(key)
FileName
FolderId
FolderInfo
表有一个ParentFolderId
,它是自己id的外键。根文件夹在ParentFolderId
中具有空值,所有其他记录通过它引用其父记录。
我想生成一个结果,其中包含所选文件及其在层次结构中的完整路径。
结果
File
Location
我需要使用一些智能T-SQL来实现这一点。如果有人能够显示基于公用表表达式的方法来递归地遍历层次结构,我将不胜感激。
答案 0 :(得分: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)变量。
这将为您提供良好的开端,但可能需要进行一些调整。