Sql server 获取文件夹的树结构
我的数据库中的“文件夹”表中有以下文件夹: 折叠1 折叠2 折页3 折页4 文件夹的路径-Folder1\Folder2\Folder3\Folder4 当我单击Folder3时,我必须获得路径-Folder1\Folder2\Folder3。为此,我传递Folder3的folderID 我怎样才能得到这个结果 表结构 FolderiD FolderName父ID 1文件夹10 2文件夹2 1 3文件夹3 2Sql server 获取文件夹的树结构,sql-server,Sql Server,我的数据库中的“文件夹”表中有以下文件夹: 折叠1 折叠2 折页3 折页4 文件夹的路径-Folder1\Folder2\Folder3\Folder4 当我单击Folder3时,我必须获得路径-Folder1\Folder2\Folder3。为此,我传递Folder3的folderID 我怎样才能得到这个结果 表结构 FolderiD FolderName父ID 1文件夹10 2文件夹2 1 3文件夹3 2 4文件夹4 3您可以为此使用递归CTE /*Test Data*/ SELECT *
4文件夹4 3您可以为此使用递归CTE
/*Test Data*/
SELECT *
INTO #Folders FROM
(SELECT 1 AS FolderId, 0 AS ParentId, 'Folder1' AS FolderName UNION ALL
SELECT 2 AS FolderId, 1 AS ParentId, 'Folder2' AS FolderName UNION ALL
SELECT 3 AS FolderId, 2 AS ParentId, 'Folder3' AS FolderName UNION ALL
SELECT 4 AS FolderId, 3 AS ParentId, 'Folder4' AS FolderName ) F
/*Query*/
;WITH fl AS
( SELECT 1 AS Level,
FolderId ,
ParentId ,
FolderName ,
CAST(FolderName AS nvarchar(MAX)) AS F
FROM #Folders
WHERE FolderId = 3
UNION ALL
SELECT Level +1 ,
f.FolderId ,
f.ParentId ,
f.FolderName,
CAST(f.FolderName + '/' + fl.F AS nvarchar(MAX))
FROM fl
JOIN #Folders f
ON fl.ParentId = f.FolderId
)
SELECT top (1) F
FROM fl
ORDER BY Level DESC
drop table #Folders
这是我在这里重复这个问题时给出的答案:
这与SQL Server有什么关系?SQL Server和文件夹之间有什么关系?表文件夹的结构是什么?@Adu-Nope。您需要为该函数使用WHILE循环,或者递归地调用表值函数。
/* Set up test data */
create table Folders (
FolderID int,
FolderName varchar(10),
ParentID int
)
insert into Folders
(FolderID, FolderName, ParentID)
select 1,'Folder1',0 union all
select 2,'Folder2',1 union all
select 3,'Folder3',2 union all
select 4,'Folder4',3
go
/* Create function */
create function dbo.CreateFolderPath (@FolderID int)
returns varchar(1000)
as
begin
declare @ParentID int
declare @FolderPath varchar(1000)
set @FolderPath = ''
select @ParentID = ParentID
from Folders
where FolderID = @FolderID
while @ParentID<>0 begin
select @FolderPath = FolderName + '\' + @FolderPath, @ParentID = ParentID
from Folders
where FolderID = @ParentID
end /* while */
return @FolderPath
end /* function */
go
/* Demo the function */
select dbo.CreateFolderPath(4)
/* Clean up after demo */
drop function dbo.CreateFolderPath
drop table Folders