2012-07-13 58 views
1

我在文件路徑我的SQL Server表中的列(文件夾和子文件夾)如何獲得在SQL Server的完整路徑的文件夾和子文件夾列表2008臺

例如:

/Hidden Reporting/Validation Report 
/Top Reporting/Inner/TopTools Report 

我現在有一個查詢返回這些路徑的所有主要文件夾:

Select Distinct 
    LEFT((substring(Path, 2, (LEN(Path) - 1))), CHARINDEX('/', (substring(Path, 2,(LEN(Path) - 1)))) - 1) AS Folder 
FROM dbo.Catalogs 
Where Type=2 

結果:

Hidden Reporting 
Top Reporting 

但我也需要獲取子文件夾。

例如:

Hidden Reporting 
Top Reporting 
Inner 

我怎麼能做到這一點在SQL Server 2008?

回答

2

首先創建一個表值函數來分割字符串。我得到了下面的函數從一些別的地方

create FUNCTION [dbo].[SplitString] 
(
    @sString varchar(5000), 
    @cDelimiter char(1) 
) 
RETURNS @tParts TABLE (part varchar(5000)) 
AS 
BEGIN 
    if @sString is null return 
    declare  @iStart int, 
       @iPos int 
    if substring(@sString, 1, 1) = @cDelimiter 
    begin 
     set  @iStart = 2 
     insert into @tParts 
     values(null) 
    end 
    else 
     set  @iStart = 1 
    while 1=1 
    begin 
     set  @iPos = charindex(@cDelimiter, @sString, @iStart) 
     if @iPos = 0 
       set  @iPos = len(@sString)+1 
     if @iPos - @iStart > 0     
       insert into @tParts 
       values (substring(@sString, @iStart, @[email protected])) 
     else 
       insert into @tParts 
       values(null) 
     set  @iStart = @iPos+1 
     if @iStart > len(@sString) 
       break 
    end 
    RETURN 

END 

現在可以執行以下選擇查詢拆分,以獲得所需的輸出

SELECT part 
FROM Catalogs C 
cross APPLY dbo.SplitString(substring([Path],1,LEN([Path]) - 
CHARINDEX('/',REVERSE([Path]))) ,'/') AS Results 
WHERE ISNULL(part,'') <> '' 
+1

那工作真的很好,但在這種情況下,我們有一個列表與所有文件夾,子文件夾和文件名。這個路徑的最後一部分是文件名(Validation Report,TopTools Report)/所以路徑的結構是:/ Folder1/Folder2/FileName但是我們只需要文件夾和子文件夾。 – user1523087 2012-07-13 11:11:27

+0

@ user1523087:我已經更新了我的查詢,請檢查一下 – 2012-07-13 11:22:43

+1

那就是greate。它按我的意願工作。非常感謝你 – user1523087 2012-07-13 11:44:35

相關問題