首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2012 FileTable 新功能深度解析:資料庫管理非結構化檔案

     編輯:關於SqlServer

FileTable 建立在 FILESTREAM 之上,將檔案系統目錄結構映射為資料表,讓 T-SQL 也能操作檔案屬性、階層、全文搜尋,並透過 SMB 共享直接以 Windows 檔案總管存取。

核心特性

  • 每列代表一個檔案或目錄。
  • 內含 file_stream (VARBINARY MAX FILESTREAM)、stream_id (GUID)、path_locator、parent_path_locator 維護階層。
  • 10 項檔案屬性(建立/修改時間、唯讀、隱藏、封存等)。
  • 支援全文檢索與語意搜尋。
  • 系統定義約束與觸發器自動維護命名空間語意。
  • 非交易存取:透過 SMB 共享直接讀寫檔案,不經 T-SQL。

部署步驟

-- 1. 執行個體層級啟用 FILESTREAM (2 = T-SQL + Win32 流存取)
EXEC sp_configure 'filestream_access_level', 2; RECONFIGURE;

-- 2. 資料庫層級設定非交易存取目錄名
ALTER DATABASE test SET FILESTREAM (NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = 'test');

-- 3. 新增 FILESTREAM 檔案群組與檔案
ALTER DATABASE test ADD FILEGROUP fg_fs CONTAINS FILESTREAM;
ALTER DATABASE test ADD FILE (NAME = 'fg1', FILENAME = 'D:\FileStream\fg1') TO FILEGROUP fg_fs;

-- 4. 建立 FileTable
CREATE TABLE DocumentStore AS FileTable
WITH (FileTable_Directory = 'DocumentTable', FileTable_Collate_Filename = database_default);

-- 5. 插入目錄
INSERT INTO dbo.DocumentStore (name, is_directory) VALUES ('MyDir01', 1);

-- 6. 在目錄下插入檔案(需手動計算 path_locator 階層編碼)
DECLARE @path HIERARCHYID, @new_path HIERARCHYID;
SELECT @path = path_locator FROM dbo.DocumentStore WHERE name = 'MyDir01';
SET @new_path = @path.GetDescendant(NULL, NULL);  -- 簡化:實務用 GetDescendant 產生子節點
INSERT INTO dbo.DocumentStore (name, file_stream, path_locator)
VALUES (N'空檔案.txt', 0x, @new_path);

SMB 共享存取

啟用後,檔案總管輸入 \\server\MSSQLSERVER\test\DocumentTable 即可像操作一般資料夾般新增/刪除/修改檔案,變更即時反映在資料表。

適用場景

  • 文件管理系統(合約、圖面、報表)
  • 影像/音訊檔案庫
  • 需同時支援資料庫關聯查詢與檔案系統直接存取的混合負載

FileTable 打通關係型與檔案系統兩世界,是非結構化資料管理的利器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved