Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 获取文件夹的树结构_Sql Server - Fatal编程技术网

Sql server 获取文件夹的树结构

Sql 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 *

我的数据库中的“文件夹”表中有以下文件夹:

折叠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 *
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