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

时间:2014-12-05 05:21:36

标签: sql-server tsql recursive-query

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

FolderInfo

Id (key)
Name
ParentFolderId (nullable)

File

FileId(key)
FileName
FolderId

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

结果

File
Location

我需要使用一些智能T-SQL来实现这一点。如果有人能够显示基于公用表表达式的方法来递归地遍历层次结构,我将不胜感激。

1 个答案:

答案 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)变量。

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