描述在 FileTable 中儲存檔案的目錄結構。
如何:使用 FileTables 中的目錄與路徑
您可使用下列3項函式在 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 中儲存之檔案或目錄的完整路徑,由下列元素做為開頭:
在 SQL Server 執行個體層級為 FILESTREAM 檔 I/O 存取啟用共用。
DIRECTORY_NAME 於資料庫層級指定。
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值 | 行為 |
| 錯誤 | 零 | 此為無效的組合,將由系統定義的條件約束所攔截。 |
| 錯誤 | <價值> | 該項目代表檔案。 |
| 是真的 | 零 | 該項目代表目錄。 |
| 是真的 | <價值> | 此為無效的組合,將由系統定義的條件約束所攔截。 |
搭配 AlwaysOn 可用性群組使用 虛擬網絡 名稱 (VNN)
當包含 FILESTREAM 或 FileTable 資料的資料庫屬於 AlwaysOn 可用性群組時:
FILESTREAM 和 FileTable 函數會接受或傳回虛擬網路名稱 (VNN) 而非電腦名稱。 如需有關這些函式的詳細資訊,請參閱 Filestream 和 FileTable 函式 (Transact-SQL)。
透過檔案系統 API 對 FILESTREAM 或 FileTable 資料進行的所有存取都應該使用 VNN 而非電腦名稱。 如需詳細資訊,請參閱 FILESTREAM 和 FileTable with AlwaysOn 可用性群組 (SQL Server) 。
另請參閱
啟用 FileTable 的必要條件
建立、改變及卸除 FileTable
利用 Transact-SQL 存取 FileTable
使用檔案輸入輸出 API 存取 FileTable