SQL Server 2008 推出革命性的 FILESTREAM 功能,將資料庫引擎與 NTFS 檔案系統深度融合,讓 varbinary(max) 大型二進位物件(BLOB)——文件、圖片、音訊、視訊——脫離資料庫檔案,直接儲存於檔案系統,同時保留完整交易一致性與 T-SQL 存取介面。本文詳述從啟用到實戰的完整配置流程。
在「資料庫引擎配置」介面勾選:

安裝介面 FILESTREAM 配置選項

USE master;
GO
EXEC sp_configure 'filestream_access_level', 2; -- 0=關閉, 1=T-SQL, 2=T-SQL+Win32
GO
RECONFIGURE;
GO

關鍵點:CREATE DATABASE 需包含 FILEGROUP ... CONTAINS FILESTREAM 子句。
CREATE DATABASE FileStreamDB ON PRIMARY
( NAME = FileStreamDB_Data, FILENAME = 'D:\FileStream\FileStreamDB_Data.mdf', SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 15% ),
FILEGROUP MyDBData
( NAME = MyFileStream_Data, FILENAME = 'D:\FileStream\FileStreamDB_Data.ndf', SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ),
FILEGROUP FileStream CONTAINS FILESTREAM
( NAME = FileStream, FILENAME = 'D:\FileStream\FileStreamData' )
LOG ON
( NAME = 'FileStreamDB_Log', FILENAME = 'D:\FileStream\FileStreamDB_Log.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB );
建立後檔案系統會出現 FileStreamData 資料夾,內含 $FSLOG 子資料夾與 filestream.hdr 標頭檔。

資料庫屬性顯示 FILESTREAM 檔案群組

檔案系統層級的 FILESTREAM 資料夾結構

$FSLOG 與 filestream.hdr 細節
必要條件:
ROWGUIDCOL 欄位(唯一識別碼,供引擎追蹤 NTFS 檔案)varbinary(max) 並加 FILESTREAM 屬性CREATE TABLE dbo.FileStreamTable
(
FS_ID UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE,
FSData VARBINARY(MAX) FILESTREAM
);
INSERT INTO FileStreamTable
VALUES (NEWID(), CAST('Inserting data into FileStreamTable........' AS VARBINARY(MAX)));
成功後,FileStreamData 資料夾下會自動建立新子資料夾對應該筆資料。
| 優點 | 缺點/限制 |
|---|---|
| BLOB 移出資料庫檔案,NTFS 管理效能優異 | 不支援資料庫鏡像 |
| 完整交易一致性保障(ACID) | 資料庫快照不包含 FILESTREAM 資料 |
| 單一檔案無大小限制(受限磁碟空間) | |
| 備份一次搞定資料庫與所有 BLOB,零遺漏風險 | |
| 雙通道存取:T-SQL 邏輯操作 + NTFS 流式高效能讀寫 |
FILESTREAM 以「資料庫管邏輯,檔案系統管二進位」的分工哲學,徹底解決 BLOB 儲存的效能、管理、備份三大痛點。對於文件管理、多媒體應用、醫療影像、工程圖檔等大量非結構化資料場景,它是 SQL Server 2008 最具實戰價值的創新功能之一。