共用方式為


建立、變更或卸除 FileTable

適用於:SQL Server

描述如何建立新的 FileTable,或是改變或卸除現有的 FileTable。

建立 FileTable

FileTable 是具有預先定義和固定結構描述的特殊使用者資料表。 這個結構描述會儲存 FILESTREAM 資料、檔案和目錄資訊,以及檔案屬性。 如需有關 FileTable 結構描述的詳細資訊,請參閱< FileTable Schema>。

您可以使用 Transact-SQL 或 SQL Server Management Studio 來建立新的 FileTable。 由於 FileTable 具有固定結構描述,因此您不需要指定資料行清單。 用於建立 FileTable 的簡單語法可讓您指定:

  • 目錄名稱。 在 FileTable 資料夾階層中,這個資料表層級目錄會成為在資料庫層級中指定之資料庫目錄的子系,以及儲存在資料表中之檔案或目錄的父系。

  • 要用於 FileTable 資料行中 Name 檔案名稱的定序名稱。

  • 要用於 3 個自動建立的主索引鍵條件約束和唯一條件約束的名稱。

使用 Transact-SQL 建立 FileTable

使用 CREATE TABLE 陳述式並配合 選項來建立 FileTable。 由於 FileTable 具有固定結構描述,因此您不需要指定資料行清單。 您可以針對新的 FileTable 指定下列設定:

  1. FILETABLE_DIRECTORY。 指定目錄,以做為 FileTable 中儲存之所有檔案和目錄的根目錄。 在資料庫的所有 FileTable 目錄名稱之間,此名稱必須是唯一的。 不論目前的定序設定為何,唯一性的比較都不區分大小寫。

    • 此值的資料類型為 nvarchar(255), 並使用固定的定序 Latin1_General_CI_AS_KS_WS

    • 您所提供的目錄名稱必須符合有效目錄名稱的檔案系統需求。

    • 在資料庫的所有 FileTable 目錄名稱之間,此名稱必須是唯一的。 不論目前的定序設定為何,唯一性的比較都不區分大小寫。

    • 如果您在建立 FileTable 時未提供目錄名稱,則會使用 FileTable 本身的名稱作為目錄名稱。

  2. FILETABLE_COLLATE_FILENAME。 指定要套用至 FileTable 中 Name 行的定序名稱。

    1. 指定的定序必須 不區分大小寫 ,以符合 Windows 檔案命名語意。

    2. 如果您未提供 的 FILETABLE_COLLATE_FILENAME值,或指定 database_default,則該欄會繼承目前資料庫的定序。 如果目前的資料庫排序規則是區分大小寫的,則會引發錯誤,且 CREATE TABLE 操作會失敗。

  3. 您也可以指定要用於 3 個自動建立的主索引鍵條件約束和唯一條件約束的名稱。 如果您未提供名稱,則系統會產生本文稍後所述的名稱。

    • FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME
    • FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME
    • FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME

範例

下列範例會建立一個新的 FileTable,並為 FILETABLE_DIRECTORYFILETABLE_COLLATE_FILENAME 指定使用者定義值。

CREATE TABLE DocumentStore AS FILETABLE
WITH (
    FILETABLE_DIRECTORY = 'DocumentTable',
    FILETABLE_COLLATE_FILENAME = database_default
);
GO

下列範例也會建立新的 FileTable。 由於未指定使用者定義的值,因此 的 FILETABLE_DIRECTORY 值會變成 FileTable 的名稱,而 的 FILETABLE_COLLATE_FILENAME 值會變成 database_default,而主索引鍵和唯一條件約束會接收系統產生的名稱。

CREATE TABLE DocumentStore AS FILETABLE;
GO

使用 SQL Server Management Studio 建立 FileTable

在物件總管中,展開選取之資料庫底下的物件、以滑鼠右鍵按一下 [資料表] 資料夾,然後選取 [New FileTable (新增 FileTable)]。

此選項會開啟新的腳本視窗,其中包含 Transact-SQL 腳本範本,您可以自訂並執行該範本來建立 FileTable。 使用 [查詢] 功能表上的 [指定範本參數的值] 選項,輕鬆地自訂指令碼。

建立 FileTable 的需求和限制

  • 您無法變更現有的資料表,以將它轉換成 FileTable。

  • 先前在資料庫層級中指定的上層目錄必須具有非 Null 值。 如需指定資料庫層級目錄的相關資訊,請參閱 啟用 FileTable 的必要條件

  • 因為 FileTable 包含 FILESTREAM 資料行,所以 FileTable 需要使用有效的 FILESTREAM 檔案群組。 您可以選擇性地指定有效的 FILESTREAM 檔案群組,作為建立 FileTable 的命令的一部分 CREATE TABLE 。 如果您未指定檔案群組,則 FileTable 會使用資料庫的預設 FILESTREAM 檔案群組。 如果資料庫沒有 FILESTREAM 檔案群組,則會引發錯誤。

  • 您無法將表格約束建立為CREATE TABLE...AS FILETABLE陳述式的一部分。 不過,您可以稍後使用 ALTER TABLE 陳述式來新增限制。

  • 您無法在tempdb資料庫或任何其他系統資料庫中建立 FileTable。

  • 您無法將 FileTable 建立為暫存資料表。

變更 FileTable

由於 FileTable 具有預先定義且固定的結構描述,因此您無法新增或變更其資料行。 不過,您可以在 FileTable 中加入自訂索引、觸發程序、條件約束及其他選項。

如需使用 ALTER TABLE 陳述式啟用或停用 FileTable 命名空間 (包括系統定義條件約束) 的相關資訊,請參閱 管理 FileTables

使用 Transact-SQL 變更 FileTable 的目錄

呼叫ALTER TABLE陳述式,並為FILETABLE_DIRECTORYSET選項提供有效的新值。

Example

ALTER TABLE filetable_name SET (FILETABLE_DIRECTORY = N'directory_name');
GO

使用 SQL Server Management Studio 變更 FileTable 的目錄

在物件總管中,以滑鼠右鍵按一下 [FileTable],並選取 [屬性] 開啟 [資料表屬性] 對話方塊。 在 [FileTable] 頁面上,輸入 [FileTable 目錄名稱] 的新值。

變更 FileTable 的需求和限制

  • 您無法變更FILETABLE_COLLATE_FILENAME的值。

  • 您無法變更、卸除或停用 FileTable 的系統定義資料行。

  • 您無法將新的使用者資料行、計算資料行或保存的計算資料行新增至 FileTable。

刪除 FileTable

您可以使用 DROP TABLE 陳述式的一般語法來卸除 FileTable。

當您卸除 FileTable 時,也會一併卸除下列物件:

  • 也會一併卸除 FileTable 的所有資料行以及與資料表相關聯的所有物件,例如索引、條件約束及觸發程序。

  • FileTable 目錄及其包含的子目錄會從資料庫的 FILESTREAM 檔案和目錄階層中消失。

DROP TABLE如果 FileTable 的檔案命名空間中有開啟的檔案控制碼,則命令會失敗。 如需關閉開啟之控制代碼的相關資訊,請參閱 管理 FileTable

當您建立 FileTable 時,會建立其他資料庫物件

當您建立新的 FileTable 時,也會建立一些系統定義的索引和條件約束。 您無法更改或刪除這些對象;只有在卸除 FileTable 本身時,它們才會消失。 若要查看這些物件的清單,請 sys.filetable_system_defined_objects查詢目錄檢視。

--View all objects for all filetables, unsorted
SELECT *
FROM sys.filetable_system_defined_objects;
GO

--View sorted list with friendly names
SELECT OBJECT_NAME(parent_object_id) AS 'FileTable',
       OBJECT_NAME(object_id) AS 'System-defined Object'
FROM sys.filetable_system_defined_objects
ORDER BY FileTable, 'System-defined Object';
GO

當您建立新的 FileTable 時所建立的索引

當您建立新的 FileTable 時,也會建立下列系統定義的索引:

資料行 索引類型 Clustered
[path_locator] ASC 主鍵
[parent_path_locator] ASC, [name] ASC 唯一
[stream_id] ASC 唯一

當您建立新的 FileTable 時創建的限制

當您建立新的 FileTable 時,也會建立下列系統定義的條件約束:

條件約束 強制執行
下列資料行的預設條件約束:

creation_time
is_archive
is_directory
is_hidden
is_offline
is_readonly
is_system
is_temporary
last_access_time
last_write_time
path_locator
stream_id
系統定義的預設條件約束會針對指定的資料行強制執行預設值。
檢查條件約束 系統定義的檢查條件約束會強制執行下列需求:

有效的檔案名稱。
有效的檔案屬性。
父物件必須是目錄。
在檔案操作期間,會鎖定命名空間階層。

系統定義限制的命名慣例

先前所述的系統定義限制會以下列格式 <constraintType>_<tablename>[_<columnname>]_<uniquifier> 命名:

  • '<constraint_type> 是CK(檢查約束)、DF(預設約束)、FK(外鍵)、PK(主鍵)或UQ(唯一約束)。

  • <uniquifier> 是系統產生的字串,可讓名稱成為唯一。 此字串可能包含 FileTable 名稱和唯一識別碼。