OLE DB Driver for SQL Server の FILESTREAM のサポート

適用対象:SQL Server - Windows のみ

OLE DB ドライバーのダウンロード

SQL Server 2008 (10.0.x) から、強化された FILESTREAM 機能が OLE DB Driver for SQL Server でサポートされるようになりました。 サンプルについては、「FILESTREAM と OLE DB」を参照してください。

FILESTREAM を使用すると、SQL Server を経由するか、Windows ファイル システムに直接アクセスすることで、大きなバイナリ値の格納やアクセスが可能になります。 大きなバイナリ値とは、2 ギガバイト (GB) よりも大きい値です。 強化された FILESTREAM のサポートの詳細については、「FILESTREAM (SQL Server)」を参照してください。

データベース接続を開くと、既定では @@TEXTSIZE-1 (無制限) に設定されます。

Windows ファイル システムの API を使用して、FILESTREAM 列にアクセスし、更新することもできます。

詳細については、「OpenSqlFilestream による FILESTREAM データへのアクセス」を参照してください。

FILESTREAM 列のクエリ

OLE DB のスキーマ行セットでは、列が FILESTREAM 列かどうかは報告されません。 OLE DB の ITableDefinition を使用して FILESTREAM 列を作成することはできません。

FILESTREAM 列を作成する場合や、既存の FILESTREAM 列を検出する場合は、sys.columns カタログ ビューの is_filestream 列を使用できます。

次のスクリプトは一例です。

-- 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 (9.x) の SQL Server Native Client によって導入された動作と互換性があります。 返されるデータの最大サイズが 2 GB に制限されます。 戻り値が 2 GB より大きい場合は切り捨てが行われ、"文字列データの右側が切り捨てられました" という内容の警告が返されます。

データ型の互換性が 80 に設定されている場合は、クライアントは下位クライアントとの互換性が維持されます。

SQLOLEDB または SQL Server 2005 (9.x) より前にリリースされたその他のプロバイダーを使用するクライアントの場合、varbinary(max)image にマップされます。

説明

  • 2 GB より大きい varbinary(max) 値を送受信するには、アプリケーションはパラメーターと結果のバインディングで DBTYPE_IUNKNOWN を使用します。 パラメーターの場合、プロバイダーは ISequentialStream および ISequentialStream を返す結果に対して IUnknown::QueryInterface を呼び出す必要があります。

  • OLE DB の場合は、ISequentialStream 値に関連するチェックが緩和されます。 DBBINDING 構造体の wTypeDBTYPE_IUNKNOWN の場合、長さのチェックを無効にするには、dwPart から DBPART_LENGTH を省略するか、データの長さ (データ バッファー内のオフセット obLength) を ~0 に設定します。 この場合、プロバイダーは値の長さをチェックせず、ストリームで利用可能なすべてのデータを要求して返します。 この変更は、SQL Server 2005 (9.x) (以降の) サーバーに接続する場合に限り、すべてのラージ オブジェクト (LOB) 型と XML に適用されます。 これにより、既存のアプリケーションや下位レベルのサーバーとの一貫性や下位互換性を維持しつつ、開発者にとってより柔軟な開発が可能になります。 この変更は、データ (主に IRowset::GetDataICommand::ExecuteIRowsetFastLoad::InsertRow) を転送するすべてのインターフェイスに影響します。