如何使用 SQL-Server 2000 查询层次结构信息?

Posted

技术标签:

【中文标题】如何使用 SQL-Server 2000 查询层次结构信息?【英文标题】:How to query hierarchical information with SQL-Server 2000? 【发布时间】:2010-10-05 12:00:59 【问题描述】:

我有一个表Folders,其中包含有关文件夹的分层信息:

FolderID     FolderName     ParentID
1            Folder1        0
2            Folder2        1
3            Folder3        2
4            Folder4        3

对于Folder4,我想获取以下格式的父文件夹:

Folder1\Folder2\Folder3\

注意:我已经问过这个before,但我不能使用 CTE,因为我使用的是 SQL-Server 2000。

【问题讨论】:

我试图重写你的问题,希望能帮助你得到答案。 【参考方案1】:

我编写了一个 SQL 函数,它应该返回您正在寻找的内容。

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

【讨论】:

@Adu:如果这个答案解决了你的问题,那么投票并感谢作者将是一个很好的举动,以纪念他为你投入的时间...... @Peter Lang:感谢您编辑原始问题的工作。

以上是关于如何使用 SQL-Server 2000 查询层次结构信息?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL-Server 如何从 TFS 查询所有活动/活动项目

sql-server:“,”附近的语法不正确

使用 PDO 驱动程序 PHP 在 sql-server 查询中循环

组合查询时的 SQL-server 语法错误(传递查询)

sql-server 堆栈查询 sql 注入更新查询不起作用

sql 2000 数据库置疑