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

SQL Server 啟用 FileStream 完整步驟:從安裝設定到資料表建立與讀寫範例

     編輯:關於SqlServer

    什麼是 FileStream?

    FileStream 將 varbinary(max) 二進位大物件 (BLOB) 儲存於 NTFS 檔案系統,而非資料庫資料檔,突破 2 GB 上限,利用檔案系統快取與串流 API,適合影像、文件、影音等大型非結構化資料。

    啟用流程 (安裝後補啟用)

    1. SQL Server 組態管理員 → 服務屬性 → FileStream 分頁

    • 勾選 針對 Transact-SQL 存取啟用 FILESTREAM。
    • 若需檔案系統串流存取,另勾選 啟用檔案系統存取 並設定 Windows 共用名稱。
    • 重啟 SQL Server 服務生效。

    2. 執行 T-SQL 設定存取層級

    EXEC sp_configure 'filestream_access_level', 2; -- 0=關閉, 1=T-SQL, 2=完整
    RECONFIGURE;

    建立支援 FileStream 的資料庫

    新資料庫

    CREATE DATABASE [FileStreamDB]
    ON PRIMARY
    ( NAME = N'FileStreamDB_data', FILENAME = N'D:\Data\FileStreamDB_data.mdf' ),
    FILEGROUP [FSGroup] CONTAINS FILESTREAM
    ( NAME = N'FSGroup_data', FILENAME = N'D:\Data\FSGroup' ) -- 目錄而非檔案
    LOG ON
    ( NAME = N'FileStreamDB_log', FILENAME = N'D:\Log\FileStreamDB_log.ldf' );

    既有資料庫新增 FileStream 檔案群組

    ALTER DATABASE [FileStreamDB]
    ADD FILEGROUP [FSGroup2] CONTAINS FILESTREAM;
    GO
    ALTER DATABASE [FileStreamDB]
    ADD FILE
    ( NAME = N'FSGroup2_data', FILENAME = N'D:\Data\FSGroup2' )
    TO FILEGROUP [FSGroup2];
    GO

    建立 FileStream 資料表

    CREATE TABLE [dbo].[Documents]
    (
        [Id] INT IDENTITY PRIMARY KEY,
        [RowGuid] UNIQUEIDENTIFIER NOT NULL UNIQUE ROWGUIDCOL DEFAULT NEWID(),
        [FileData] VARBINARY(MAX) FILESTREAM NULL,
        [FileName] NVARCHAR(255),
        [UploadTime] DATETIME2 DEFAULT SYSUTCDATETIME()
    );
    -- 必須條件:
    -- 1. 有 ROWGUIDCOL 的 UNIQUEIDENTIFIER NOT NULL UNIQUE 欄位
    -- 2. VARBINARY(MAX) 欄位標記 FILESTREAM

    基本讀寫範例

    插入資料 (0x00 代表空檔案,實際可用參數化傳遞位元組陣列)

    INSERT INTO [dbo].[Documents] (FileName, FileData)
    VALUES ('test.pdf', 0x00); -- 實際開發用參數化 @FileData

    取得檔案系統路徑 (供 Win32 API / SqlFileStream 串流存取)

    SELECT FileData.PathName() AS FilePath,
           GET_FILESTREAM_TRANSACTION_CONTEXT() AS TxnContext
    FROM [dbo].[Documents]
    WHERE Id = 1;

    效能與維護建議

    • 資料庫備份:FileStream 檔案包含於備份集,BACKUP DATABASE 即可完整備份,無需額外複製檔案目錄。
    • 檔案群組獨立磁碟:將 FileStream 目錄放置於獨立磁碟/SSD,避免與資料/記錄檔爭用 IO。
    • 防毒軟體排除:排除 FileStream 目錄掃描,防止檔案鎖定導致存取失敗。
    • 資料庫壓縮:FileStream 資料不支援資料列/頁面壓縮。

    結語

    FileStream 以最小程式碼變更即可獲得檔案系統級效能與無上限儲存,關鍵在於啟用層級設定、建立 CONTAINS FILESTREAM 檔案群組、資料表滿足 ROWGUIDCOL 條件。配合 SqlFileStream 類別 (ADO.NET) 可實作高效能串流上傳/下載。

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