FileStream 是 SQL Server 2008 引入的功能,允許將非結構化大型資料 (文件、圖片、影片等) 以 varbinary(max) 形式儲存於檔案系統,同時享有資料庫的交易一致性、備份還原整合等優勢。安裝時預設未啟用,需手動開啟。
MSSQLSERVER),右鍵選 屬性。EXEC sp_configure filestream_access_level, 2; RECONFIGURE;
filestream_access_level 值說明:0=停用、1=僅 T-SQL、2=完整啟用 (含檔案系統存取)。
CREATE DATABASE FileStreamDB ON PRIMARY ( NAME = FSDB_data, FILENAME = 'C:\Data\FSDB_data.mdf' ), FILEGROUP FSDB_FSGroup CONTAINS FILESTREAM ( NAME = FSDB_FSData, FILENAME = 'C:\Data\FSDB_FSGroup' ) LOG ON ( NAME = FSDB_log, FILENAME = 'C:\Log\FSDB_log.ldf' );
注意:FILENAME 指向的是資料夾路徑,而非檔案,SQL Server 會在該資料夾建立 FileStream 容器。
ALTER DATABASE FileStreamDB ADD FILEGROUP FSGroup2 CONTAINS FILESTREAM; GO ALTER DATABASE FileStreamDB ADD FILE ( NAME = 'FSGroup2_Data', FILENAME = 'D:\Data\FSGroup2' ) TO FILEGROUP FSGroup2; GO
CREATE TABLE DocumentStore
(
DocID INT PRIMARY KEY,
RowGuid UNIQUEIDENTIFIER NOT NULL ROWGUIDCOL UNIQUE DEFAULT NEWID(),
FileContent VARBINARY(MAX) FILESTREAM NULL
);
關鍵點:
ROWGUIDCOL 的 UNIQUEIDENTIFIER 資料行。VARBINARY(MAX) FILESTREAM。-- 插入空檔案佔位 INSERT INTO DocumentStore (DocID, FileContent) VALUES (1, 0x00); INSERT INTO DocumentStore (DocID, FileContent) VALUES (2, 0x00); INSERT INTO DocumentStore (DocID, FileContent) VALUES (3, 0x00); -- 取得檔案系統路徑 (供應用程式直接讀寫) SELECT FileContent.PathName() AS FilePath FROM DocumentStore;
FileStream 結合了資料庫管理優勢與檔案系統效能,是處理大型非結構化資料的理想選擇。詳細用法請參考線上叢書 FILESTREAM (Transact-SQL) 章節。