共用方式為


OLE DB Driver for SQL Server 中的 FILESTREAM 支援

只適用於 SQL Server - 僅限 Windows。

下載 OLE DB 驅動程式

從 SQL Server 2008 (10.0.x) 開始,OLE DB Driver for SQL Server 支援已增強的 FILESTREAM 功能。 如需範例,請參閱 FILESTREAM 和 OLE DB

FILESTREAM 提供透過 SQL Server 或直接存取 Windows 檔案系統來儲存及存取大型二進位值的方式。 大型二進位值是大於 2 GB 的值。 如需增強型 FILESTREAM 支援的詳細資訊,請參閱 FILESTREAM (SQL Server)

開啟資料庫連接時, @@TEXTSIZE 預設會設定為 -1 [無限制]。

也可以使用 Windows 檔案系統 API 來存取及更新 FILESTREAM 資料行。

如需詳細資訊,請參閱 使用 OpenSqlFilestream 存取 FILESTREAM 數據。

查詢 FILESTREAM 資料行

OLE DB 中的架構數據列集不會報告數據行是否為 FILESTREAM 資料行。 ITableDefinition 在 OLE DB 中,無法用來建立 FILESTREAM 數據行。

若要建立 FILESTREAM 數據行或偵測哪些現有數據行是 FILESTREAM 數據行,您可以使用 is_filestream sys.columns 目錄檢視的數據行。

下列文稿是範例:

-- Create a table with a FILESTREAM column.
CREATE TABLE Bob_01 (
    GuidCol1 UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWID(),
    IntCol2 INT,
    varbinaryCol3 VARBINARY(MAX) FILESTREAM
);

-- Find FILESTREAM columns.
SELECT name
FROM sys.columns
WHERE is_filestream = 1;

-- Determine whether a column is a FILESTREAM column.
SELECT is_filestream
FROM sys.columns
WHERE name = 'varbinaryCol3'
    AND object_id IN (
        SELECT object_id
        FROM sys.tables
        WHERE name = 'Bob_01'
    );

下層相容性

如果您的用戶端是使用 OLE DB Driver for SQL Server 編譯,而且應用程式會聯機到 SQL Server 2012 (11.x) 和更新版本,則 varbinary(max) 行為與 SQL Server 2005 中 SQL Server Native Client 所導入的行為相容(9.x)。 也就是說,傳回數據的大小上限限製為 2 GB。 對於大於 2 GB 的結果值,會發生截斷,並傳回「字串數據右截斷」警告。

當數據類型相容性設定為80時,客戶端行為會與下層客戶端行為一致。

對於使用 SQLOLEDB 或其他在 SQL Server 2005 (9.x) 之前發行之提供者的用戶端, varbinary(max) 會對應至 映像

註解

  • 若要傳送和接收 大於 2 GB 的 varbinary(max) 值,應用程式 DBTYPE_IUNKNOWN 會在參數和結果係結中使用 。 若是參數,提供者必須針對 ISequentialStream 和傳回 ISequentialStream 的結果,呼叫 IUnknown::QueryInterface。

  • 針對 OLE DB,檢查與 ISequentialStream 值相關的檢查是寬鬆的。 當 wType DBTYPE_IUNKNOWN 位於 結構中 DBBINDING 時,可以省略 DBPART_LENGTH dwPart 來停用長度檢查,或將數據長度設定為 (在數據緩衝區中的位移 obLength ) 設定為 ~0。 在此情況下,提供者不會檢查值的長度,而且會要求並傳回透過數據流取得的所有數據。 這項變更會套用至所有大型物件 (LOB) 類型和 XML,但只有在連線到 SQL Server 2005 (9.x) 或更新版本)伺服器時才適用。 這可為開發人員提供更大的彈性,同時維護現有應用程式和下層伺服器的一致性和回溯相容性。 這項變更會影響傳輸資料的所有介面,主要是 IRowset::GetDataICommand::ExecuteIRowsetFastLoad::InsertRow