共用方式為


建立、修改和刪除 FileTable

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

建立 FileTable

FileTable 是具有預先定義和固定架構的特殊用戶數據表。 此架構會儲存 FILESTREAM 資料、檔案和目錄資訊,以及檔案屬性。 如需 FileTable 架構的相關信息,請參閱 FileTable 架構

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

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

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

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

如何建立檔案表格

使用 Transact-SQL 建立 FileTable
使用 AS FileTable 選項呼叫 CREATE TABLE (Transact-SQL) 語句,以建立 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
在 [物件總管] 中,展開選取的資料庫底下的對象,然後以滑鼠右鍵按兩下 [ 數據表 ] 資料夾,然後選取 [ 新增 FileTable]。

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

建立 FileTable 的需求和限制

  • 您無法改變現有的數據表,將它轉換成 FileTable。

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

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

  • 您無法在 CREATE TABLE...AS FILETABLE 語句中作為一部分來建立資料表約束。 不過,您稍後可以使用 ALTER TABLE 語句來新增條件約束。

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

  • 您無法建立 FileTable 做為臨時表。

修改 FileTable

由於 FileTable 具有預先定義的和固定架構,因此您無法新增或變更其數據行。 不過,您可以將自定義索引、觸發程式、條件約束和其他選項新增至 FileTable。

如需使用 ALTER TABLE 語句來啟用或停用 FileTable 命名空間的相關信息,包括系統定義的條件約束,請參閱管理 FileTable。

如何:變更 FileTable 的目錄

使用 Transact-SQL 變更 FileTable 的目錄
呼叫 ALTER TABLE 語句,並為 FILETABLE_DIRECTORY SET 選項提供有效的新值。

範例

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 (Transact-SQL) 語句的一般語法來卸除 FileTable。

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

  • 所有 FileTable 的列,以及與該表相關聯的所有物件,例如索引、約束和觸發程式,也會被刪除。

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

如果 FileTable 的檔案命名空間中有開啟的檔案句柄,DROP TABLE 命令就會失敗。 如需關閉開啟句柄的相關資訊,請參閱管理文件表。

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

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

--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 時,也會建立下列系統定義的索引:

欄位 索引類型
[path_locator]ASC 主鍵,非叢集
[parent_path_locator]ASC、

[name]ASC
Unique、nonclustered
[stream_id]ASC 惟一非群集

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

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

creation_time
is_archive
is_directory
is_hidden
is_offline
is_readonly
is_system
is_temporary
最後存取時間
last_write_time
path_locator
stream_id
系統定義的預設條件約束會強制執行指定數據行的預設值。
檢查約束條件 系統定義的檢查條件約束會強制執行下列需求:

有效的檔名。

有效的檔案屬性。

父對象必須是目錄。

命名空間階層會在檔案操作期間鎖定。

系統定義條件約束的命名慣例
上述系統定義的條件是以格式<constraintType>_<tablename>[_<columnname>]_<uniquifier>命名,其中:

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

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

另請參閱

管理 FileTable