共用方式為


使用 FileTables 中的目錄與路徑

描述在 FileTable 中儲存檔案的目錄結構。

本主題內容

我想要…

  • 使用 FileTables 中的目錄與路徑

  • 使用可攜式程式碼的相對路徑

深入了解

  • 重要限制

    • 巢狀層級

    • 完整路徑名稱長度

  • FileTable 中儲存之項目的完整路徑

  • 執行個體、資料庫與 FileTable 層級上根目錄的語意

  • FileTable 結構描述中的 is_directory 資料行

  • 使用虛擬網路名稱 (VNN) 搭配 AlwaysOn 可用性群組

如何:使用 FileTables 中的目錄與路徑

您可使用下列三項函數在 Transact-SQL 中使用 FileTable 目錄:

為得到此結果

使用此函數

取得特定 FileTable 或目前資料庫的根層級 UNC 路徑。

FileTableRootPath (Transact-SQL)

取得 FileTable 中檔案或目錄的絕對路徑或相對 UNC 路徑。

GetFileNamespacePath (Transact-SQL)

經由提供路徑的方法,取得 FileTable 中指定之檔案或目錄的路徑定位器識別碼值。

GetPathLocator (Transact-SQL)

[回到頁首]

如何:使用可攜式程式碼的相對路徑

若要讓程式碼與應用程式獨立於目前的電腦與資料庫之外,請避免撰寫依賴絕對檔案路徑的程式碼。 請改為一併使用 FileTableRootPath (Transact-SQL)GetFileNamespacePath (Transact-SQL) 函式,於執行時間取得檔案的完整路徑,如下範例所示。 根據預設,GetFileNamespacePath 函數會傳回資料庫根路徑之下的檔案相對路徑。

USE database_name;
DECLARE @root nvarchar(100);
DECLARE @fullpath nvarchar(1000);

SELECT @root = FileTableRootPath();
SELECT @fullpath = @root + file_stream.GetFileNamespacePath()
    FROM filetable_name
    WHERE name = N'document_name';

PRINT @fullpath;
GO

[回到頁首]

重要限制

巢狀層級

重要事項重要事項

您不能在 FileTable 目錄中儲存超過 15 層的子目錄。 當您儲存了 15 層的子目錄時,最低的一層將無法包含任何檔案,因為這些檔案代表另外的一層。

完整路徑名稱長度

重要事項重要事項

NTFS 檔案系統支援遠超過 Windows Shell 和大多數 Windows API 的 260 字元限制的路徑名稱。 因此,可以使用 Transact-SQL 建立 FileTable 檔案階層中完整路徑名稱超過 260 字元的檔案,但卻無法以 Windows 檔案總管或許多其他 Windows 應用程式檢視或開啟這些檔案。 不過,您可以繼續使用 Transact-SQL 存取這些檔案。

FileTable 中儲存之項目的完整路徑

FileTable 中儲存之檔案或目錄的完整路徑,由下列元素做為開頭:

  1. 在 SQL Server 執行個體層級為 FILESTREAM 檔 I/O 存取啟用共用。

  2. DIRECTORY_NAME 指定是資料庫層級。

  3. FILETABLE_DIRECTORY 指定是 FileTable 層級。

所產生的階層如下:

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

此目錄階層會形成 FileTable 命名空間的根。 在此目錄階層之下,FileTable 的 FILESTREAM 資料將會儲存為檔案,以及其下也可以再包含檔案與子目錄的子目錄。

請務必牢記,於此執行個體層級的 FILESTREAM 共用之下所建立的目錄階層,是一個虛擬的目錄階層。 此階層儲存於 SQL Server 資料庫,且不會實際於 NTFS 檔案系統中呈現出來。 所有存取 FILESTREAM 共用之下以及其所包含之 FileTables 中檔案與目錄的作業,都會由檔案系統中內嵌的 SQL Server 元件所攔截與處理。

[回到頁首]

執行個體、資料庫與 FileTable 層級上根目錄的語意

此目錄階層結構遵循下列語義:

  • 執行個體層級的 FILESTREAM 共用由管理員所設定,而且會儲存為伺服器屬性。 您可使用 SQL Server 組態管理員,重新命名此共用。 伺服器重新啟動之前重新命名作業不會生效。

  • 當您建立新的資料庫時,資料庫層級的 DIRECTORY_NAME 預設為 Null。 管理員可使用 ALTER DATABASE 陳述式設定或變更此名稱。 該執行個體中的名稱不行重複 (不分大小寫)。

  • 一般來說當您建立 FileTable 時,會以 FILETABLE_DIRECTORY 名稱做為 CREATE TABLE 陳述式的一部分。 您也可以使用 ALTER TABLE 命令變更此名稱。

  • 您無法透過檔案 I/O 作業變更這些根目錄的名稱。

  • 您無法以獨佔的檔案控制開啟這些根目錄。

[回到頁首]

FileTable 結構描述中的 is_directory 資料行

下表說明 is_directory 資料行以及與將 FILESTREAM 資料包含於 FileTable 中的 file_stream 資料行之間的互動。

is_directory

file_stream

行為

FALSE

NULL

此為無效的組合,將由系統定義的條件約束所攔截。

FALSE

<值>

該項目代表檔案。

TRUE

NULL

該項目代表目錄。

TRUE

<value>

此為無效的組合,將由系統定義的條件約束所攔截。

[回到頁首]

使用虛擬網路名稱 (VNN) 搭配 AlwaysOn 可用性群組

當包含 FILESTREAM 或 FileTable 資料的資料庫屬於 AlwaysOn 可用性群組時:

[回到頁首]

請參閱

概念

啟用 FileTable 的必要條件

建立、改變及卸除 FileTable

利用 Transact-SQL 存取 FileTable

使用檔案 I/O API 存取 FileTable