FileTable (SQL Server)

適用於:SQL Server

FileTable 功能提供 Windows 檔案命名空間與 Windows 應用程式相容性,在 SQL Server 中儲存檔案資料的支援。 FileTable 可讓應用程式整合其儲存和資料管理元件,並且透過非結構化資料和中繼資料提供整合式 SQL Server 服務 (包含全文檢索搜尋與語意搜尋)。

亦即您可以在 SQL Server 名為 FileTable 的特殊資料表中,儲存檔案和文件,但如同儲存在檔案系統般,您可以從 Windows 應用程式存取檔案和文件,而不必變更用戶端應用程式。

FileTable 功能以 SQL Server FILESTREAM 技術為基礎組建。 若要深入了解 FILESTREAM,請參閱 FILESTREAM (SQL Server)

FileTable 功能的優點

FileTable 功能的目標包括:

  • SQL Server 資料庫中儲存的檔案資料 Windows API 相容性。 Windows API 相容性包括下列項目:

    • FILESTREAM 資料的非交易式資料流存取和就地更新。

    • 目錄和檔案的階層式命名空間。

    • 檔案屬性的儲存,例如建立日期和修改日期。

    • Windows 檔案和目錄管理 API 的支援。

  • 其他 SQL Server 功能,包括 FILESTREAM 和檔案屬性資料的管理工具、服務和關聯查詢功能的相容性。

所以 FileTable 移除重大的障礙,讓您可使用 SQL Server 儲存並管理檔案伺服器上目前歸屬為檔案的非結構化資料。 企業可將此資料從檔案伺服器移至 FileTable,利用 SQL Server 提供的整合式管理與服務。 同時,企業可以針對將這項資料視為檔案系統中之檔案的現有 Windows 應用程式,維持 Windows 應用程式相容性。

何謂 FileTable

應用程式需要在資料庫儲存包含 Windows API 相容性和非交易式存取的檔案與目錄時,SQL Server 提供特殊的檔案資料表 (也稱為 FileTable)。 FileTable 是包含預先定義結構描述的特殊化使用者資料表,可儲存 FILESTREAM 資料、檔案和目錄階層資訊,以及檔案屬性。

FileTable 提供了下列功能:

  • FileTable 代表目錄和檔案的階層。 它會儲存與該階層中所有節點相關的資料 (目錄以及它們所包含的檔案)。 這個階層是從您建立 FileTable 時指定的根目錄開始。

  • FileTable 中的每個資料列都代表一個檔案或目錄。

  • 每個資料列都包含下列項目。 如需 FileTable 結構描述的詳細資訊,請參閱 FileTable 結構描述

    • 串流資料 file_stream 資料行和 stream_id (GUID) 識別碼。 (目錄的 file_stream 資料行為 NULL)。

    • 用於代表和維護目前項目 (檔案或目錄) 與目錄階層的 path_locatorparent_path_locator 資料行。

    • 檔案 I/O API 可用的 10 個檔案屬性,例如建立日期和修改日期。

    • 支援針對檔案和文件進行全文檢索搜尋和語意搜尋的類型資料行。

  • FileTable 會強制執行特定系統定義的條件約束和觸發程序來維護檔案命名空間語意。

  • 針對非交易式存取設定資料庫後,針對 SQL Server 執行個體設定的 FILESTREAM 共用下會公開 FileTable 中代表的檔案和目錄階層。 這會提供 Windows 應用程式的檔案系統存取。

FileTable 的一些其他特性

  • 儲存在 FileTable 中的檔案和目錄資料會透過 Windows API 架構應用程式之非交易式檔案存取的 Windows 共用公開。 針對 Windows 應用程式,這看起來就像含有其檔案和目錄的一般共用。 應用程式可以使用一組豐富的 Windows API,來管理此共用下的檔案和目錄。

  • 透過此共用顯示的目錄階層就是在 FileTable 內部維護的單純邏輯目錄結構。

  • SQL Server 元件會攔截 Windows 共用呼叫建立或變更檔案或目錄,然後反映至 FileTable 中對應的關聯資料。

  • Windows API 操作的本質為非交易式,而且並未與使用者交易相關聯。 不過,系統完全支援儲存在 FileTable 中之 FILESTREAM 資料的交易式存取,就如同一般資料表中的任何 FILESTREAM 資料行。 如果您經常需要從多個連線修改檔案,並確保檔案保護正常,請透過 OpenSqlFilestream() 使用交易式 FILESTREAM 存取,而不是在 Windows API 層級獨占檔案鎖定。

  • FileTable 也可以透過一般 Transact-SQL 存取來查詢和更新。 這些功能也整合了 SQL Server 管理工具,及備份等功能。

  • 無法透過 dbmail 傳送電子郵件要求,且無法附加位於 FILESTREAM 目錄的檔案 (FileTable 亦如此)。 檔案系統篩選驅動程式 RsFx0420 會檢查進入和離開 FILESTREAM 資料夾的傳入 I/O 要求。 若要求並非來自 SQLServer 可執行檔及 FILESTREAM 程式碼,它們會明確遭到拒絕。

使用 FileTable 的額外考量

管理考量

關於 FILESTREAM 和 FileTable

您可以分別設定 FileTable 與 FILESTREAM。 因此,您可以繼續使用 FILESTREAM 功能,而不需要啟用非交易式存取或建立 FileTable。

除了透過 FileTable 以外,沒有 FILESTREAM 資料的非交易式存取。 因此,當您啟用非交易式存取時,並不會影響現有 FILESTREAM 資料行和應用程式的行為。

關於 FileTable 和非交易式存取

您可以在資料庫層級中啟用或停用非交易式存取。

您可以在資料庫層級中設定或微調非交易式存取,方法是關閉它,或是啟用唯讀或完整讀取/寫入存取。

FileTable 不支援記憶體對應檔案

FileTable 不支援記憶體對應檔案。 記事本和小畫家是使用記憶體對應檔案的兩個常見的應用程式例子。 無法在 SQL Server 同個電腦上使用這些應用程式來開啟 FileTable 中儲存的檔案。 但是,可以從遠端電腦使用這些應用程式來開啟儲存在 FileTable 中的檔案,因為在這些情況下不使用記憶體對應功能。