分享方式:


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 傳回完整的 UNC 路徑,從 \\computer_name開始。

@option
整數表達式,定義路徑的伺服器元件應該如何格式化。 @option可以有下列其中一個值:

描述
0 傳回轉換成 NetBIOS 格式的伺服器名稱,例如:

\\SERVERNAME\MSSQLSERVER\MyDocumentDatabase

這是預設值。
1 傳回伺服器名稱而不轉換,例如:

\\ServerName\MSSQLSERVER\MyDocumentDatabase
2 傳回完整的伺服器路徑,例如:

\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDatabase

傳回類型

nvarchar(max)

如果 SQL Server 實例是叢集在故障轉移叢集中,則傳回做為此路徑一部分的電腦名稱是叢集實例的虛擬主機名。

當資料庫屬於 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 中的目錄與路徑