OLE DB Driver for SQL Server の FILESTREAM のサポート
適用対象: SQL Server - Windows のみ
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 にマップされます。
Comments
2 GB より大きい varbinary(max) 値を送受信するには、アプリケーションはパラメーターと結果のバインディングで
DBTYPE_IUNKNOWN
を使用します。 パラメーターの場合、プロバイダーは ISequentialStream および ISequentialStream を返す結果に対して IUnknown::QueryInterface を呼び出す必要があります。OLE DB の場合は、ISequentialStream 値に関連するチェックが緩和されます。
DBBINDING
構造体の wType がDBTYPE_IUNKNOWN
の場合、長さのチェックを無効にするには、dwPart からDBPART_LENGTH
を省略するか、データの長さ (データ バッファー内のオフセット obLength) を~0
に設定します。 この場合、プロバイダーは値の長さをチェックせず、ストリームで利用可能なすべてのデータを要求して返します。 この変更は、SQL Server 2005 (9.x) (以降の) サーバーに接続する場合に限り、すべてのラージ オブジェクト (LOB) 型と XML に適用されます。 これにより、既存のアプリケーションや下位レベルのサーバーとの一貫性や下位互換性を維持しつつ、開発者にとってより柔軟な開発が可能になります。 この変更は、データ (主にIRowset::GetData
、ICommand::Execute
、IRowsetFastLoad::InsertRow
) を転送するすべてのインターフェイスに影響します。