다음을 통해 공유


GetFileNamespacePath(Transact-SQL)

적용 대상: SQL Server

FileTable의 파일 또는 디렉터리에 대한 UNC 경로를 반환합니다.

구문

  
<column-name>.GetFileNamespacePath(is_full_path, @option)  

인수

column-name
FileTable에 있는 VARBINARY(MAX) file_stream 열의 열 이름입니다.

열 이름 값은 유효한 열 이름이어야 합니다. 식이나 다른 데이터 형식의 열에서 변환되거나 캐스팅된 값일 수 없습니다.

is_full_path
상대 경로 또는 절대 경로를 반환할지 여부를 지정하는 정수 식입니다. is_full_path 다음 값 중 하나를 가질 수 있습니다.

설명
0 데이터베이스 수준 디렉터리 내에서의 상대 경로를 반환합니다.

이 값이 기본값입니다.
1 에서 시작하여 \\computer_name전체 UNC 경로를 반환합니다.

@option
경로의 서버 구성 요소의 서식을 지정하는 방법을 정의하는 정수 식입니다. @option 다음 값 중 하나를 가질 수 있습니다.

설명
0 NetBIOS 형식으로 변환된 서버 이름을 반환합니다. 예를 들면 다음과 같습니다.

\\SERVERNAME\MSSQLSERVER\MyDocumentDatabase

기본값입니다.
1 변환 없이 서버 이름을 반환합니다. 예를 들면 다음과 같습니다.

\\ServerName\MSSQLSERVER\MyDocumentDatabase
2 예를 들어 전체 서버 경로를 반환합니다.

\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDatabase

반환 형식

nvarchar(max)

SQL Server 인스턴스가 장애 조치(failover) 클러스터에 클러스터된 경우 이 경로의 일부로 반환되는 컴퓨터 이름은 클러스터형 인스턴스의 가상 호스트 이름입니다.

데이터베이스가 Always On 가용성 그룹에 속하는 경우 FileTableRootPath 함수는 컴퓨터 이름 대신 VNN(가상 네트워크 이름)을 반환합니다.

일반적인 주의 사항

GetFileNamespacePath 함수가 반환하는 경로는 다음 형식의 논리 디렉터리 또는 파일 경로입니다.

\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\...

이 논리 경로는 실제 NTFS 경로에 직접 해당하지 않습니다. FILESTREAM의 파일 시스템 필터 드라이버 및 FILESTREAM 에이전트에 의해 실제 경로로 변환됩니다. 논리 경로와 실제 경로를 분리하면 SQL Server가 경로의 유효성에 영향을 주지 않고 내부적으로 데이터를 다시 구성합니다.

좋은 연습 방법

코드와 애플리케이션을 현재 컴퓨터 및 데이터베이스와 독립적으로 유지하려면 절대 파일 경로를 사용하는 코드를 작성하지 마세요. 대신 다음 예제와 같이 FileTableRootPath 및 GetFileNamespacePath 함수를 함께 사용하여 런타임에 파일의 전체 경로를 가져옵니다. 기본적으로 GetFileNamespacePath 함수는 데이터베이스의 루트 경로 아래에 있는 파일의 상대 경로를 반환합니다.

USE MyDocumentDatabase;  
@root varchar(100)  
SELECT @root = FileTableRootPath();  
  
@fullPath = varchar(1000);  
SELECT @fullPath = @root + file_stream.GetFileNamespacePath() FROM DocumentStore  
WHERE Name = N'document.docx';  

설명

예제

다음 예제에서는 GetFileNamespacePath 함수를 호출하여 FileTable의 파일 또는 디렉터리에 대한 UNC 경로를 가져오는 방법을 보여 줍니다.

-- returns the relative path of the form "\MyFileTable\MyDocDirectory\document.docx"  
SELECT file_stream.GetFileNamespacePath() AS FilePath FROM DocumentStore  
WHERE Name = N'document.docx';  
  
-- returns "\\MyServer\MSSQLSERVER\MyDocumentDatabase\MyFileTable\MyDocDirectory\document.docx"  
SELECT file_stream.GetFileNamespacePath(1, Null) AS FilePath FROM DocumentStore  
WHERE Name = N'document.docx';  

참고 항목

FileTable에서 디렉터리 및 경로 작업