2012-07-13 1 views
1

나는 예를 들어SQL Server의 전체 경로에서 폴더와 하위 폴더의 목록을 얻는 방법 2008 표

(폴더 및 하위 폴더로) 파일 경로 내 SQL Server 테이블에 열이 :

/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 

결과 :

012

나는 현재이 경로의 모든 주요 폴더를 반환하는 쿼리를

하지만 하위 폴더도 가져와야합니다. 예를 들어

:

Hidden Reporting 
Top Reporting 
Inner 

어떻게 SQL 서버 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

그게 정말 좋은 작업을하지만,이 경우 우리는 하나 개의 목록이 모든 폴더, 하위 폴더 및 파일 이름이 표시됩니다. 이 경로의 마지막 부분은 파일 이름 (유효성 보고서, TopTools 보고서)입니다./경로의 구조는 다음과 같습니다./Folder1/Folder2/FileName하지만 폴더와 하위 폴더 만 있으면됩니다. – user1523087

+0

@ user1523087 : 내 검색어를 업데이트했습니다. 확인하십시오. –

+1

그게 전부입니다. 그것은 내가 원하는대로 작동합니다. 대단히 감사합니다 – user1523087

관련 문제