2010-10-05 57 views
2

我有一个表Folders与层次信息有关文件夹:如何用SQL-Server 2000查询分层信息?

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

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

Folder1\Folder2\Folder3\ 

注:我问过这个before,但是我不能使用CTE,因为我正在使用SQL-Server 2000.

+0

我试图改写你的问题,希望能帮助你得到答案。 – 2010-10-05 13:07:07

回答

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 
+1

@Adu:如果这个答案解决了你的问题,那么对它进行投票并感谢作者将是一个很好的举动来纪念他为你投资的时间...... – 2010-10-05 14:45:01

+0

@Peter Lang:并且感谢你,以及为您的工作编辑原始问题。 – 2010-10-05 14:56:55