GetFileNamespacePath (Transact-SQL)
傳回 FileTable 中檔案或目錄的 UNC 路徑。
語法
<column-name>.GetFileNamespacePath(is_full_path, @option)
引數
column-name
FileTable 中 VARBINARY(MAX) file_stream 資料行的資料行名稱。column-name 值必須是有效的資料行名稱。 它不可以是運算式,或是從其他資料類型之資料行轉換或轉型的值。
is_full_path
指定傳回相對路徑或絕對路徑的整數運算式。 is_full_path 可具有下列其中一個值:值
說明
0
傳回資料庫層級目錄內的相對路徑。
這是預設值。
1
傳回以 \\computer_name 開始的完整 UNC 路徑。
@option
定義路徑之伺服器元件格式化方式的整數運算式。 @option 可具有下列其中一個值:值
說明
0
傳回轉換成 NetBIOS 格式的伺服器名稱,例如:
\\SERVERNAME\MSSQLSERVER\MyDocumentDB
這是預設值。
1
在不轉換的情況下傳回伺服器名稱,例如:
\\ServerName\MSSQLSERVER\MyDocumentDB
2
傳回完整伺服器路徑,例如:
\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDB
傳回類型
nvarchar(max)
如果 SQL Server 執行個體在容錯移轉叢集中叢集化,則當做此路徑一部分傳回的電腦名稱是叢集執行個體的虛擬主機名稱。
當資料庫屬於 AlwaysOn 可用性群組時,FileTableRootPath 函數會傳回虛擬網路名稱 (VNN) 而非電腦名稱。
一般備註
GetFileNamespacePath 函數傳回的路徑是採用以下格式的邏輯目錄或檔案路徑:
\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\...
這個邏輯路徑不會直接對應到實體 NTFS 路徑。 FILESTREAM 的檔案系統篩選驅動程式和 FILESTREAM 代理程式會將它轉譯成實體路徑。 邏輯路徑與實體路徑之間的這個分隔可讓 SQL Server 重新組織內部資料,而不會影響路徑的有效性。
最佳作法
若要讓程式碼和應用程式獨立於目前的電腦和資料庫之外,請避免撰寫依賴絕對檔案路徑的程式碼。 請改為一起使用 FileTableRootPath 和 GetFileNamespacePath 函數,在執行階段取得檔案的完整路徑,如下列範例所示。 根據預設,GetFileNamespacePath 函數會傳回資料庫根路徑之下的檔案相對路徑。
USE MyDocumentDB;
@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\MyDocumentDB\MyFileTable\MyDocDirectory\document.docx”
SELECT file_stream.GetFileNamespacePath(1, Null) AS FilePath FROM DocumentStore
WHERE Name = N’document.docx’;