次の方法で共有


スパース列のサポート (OLE DB)

このトピックでは、SQL Server Native Client OLE DB でのスパース列のサポートについて説明します。スパース列の詳細については、「SQL Server Native Client におけるスパース列のサポート」を参照してください。

OLE DB ステートメント メタデータ

SQL Server 2008 以降では、新しい DBCOLUMNFLAGS フラグ値である DBCOLUMNFLAGS_SS_ISCOLUMNSET を使用できます。この値は、column_set 値である列に対して設定する必要があります。DBCOLUMNFLAGS フラグは、IColumnsInfo::GetColumnsInfo の dwFlags パラメータと、IColumnsRowset::GetColumnsRowset によって返される行セットの DBCOLUMN_FLAGS 列を通じて取得できます。

OLE DB カタログ メタデータ

DBSCHEMA_COLUMNS に、SQL Server 固有の列が 2 つ追加されています。

列名

データ型

値およびコメント

SS_IS_SPARSE

DBTYPE_BOOL

列がスパース列の場合は VARIANT_TRUE、それ以外の場合は VARIANT_FALSE になります。

SS_IS_COLUMN_SET

DBTYPE_BOOL

列がスパース column_set 列の場合は VARIANT_TRUE、それ以外の場合は VARIANT_FALSE になります。

また、2 つのスキーマ行セットが追加されています。これらの行セットは、構造は DBSCHEMA_COLUMNS と同じですが、返される内容が異なります。DBSCHEMA_COLUMNS_EXTENDED は、スパース列かどうか、column_set のメンバかどうかに関係なく、すべての列を返します。DBSCHEMA_SPARSE_COLUMN_SET は、スパース column_set のメンバである列のみを返します。

OLE DB DataTypeCompatibility の動作

DataTypeCompatibility=80 の (接続文字列内での) 動作は、次のように、SQL Server 2000 クライアントと変わりません。

  • 新しいスキーマ行セットは表示されず、スキーマ行セットの行セットにそれらのスキーマ行セットの行は含まれません。

  • COLUMNS 行セット内の新しい列は表示されません。

  • DBCOLUMNFLAGS_SS_ISCOLUMNSET が column_set 列に対して設定されません。

  • DBCOMPUTEMODE_NOTCOMPUTED が column_set 列に対して設定されます。

OLE DB によるスパース列のサポート

スパース列をサポートするために、SQL Server Native Client で次の OLE DB インターフェイスが変更されています。

型またはメンバ関数

説明

IColumnsInfo::GetColumnsInfo

dwFlags で、新しい DBCOLUMNFLAGS フラグ値である DBCOLUMNFLAGS_SS_ISCOLUMNSET が column_set 列に対して設定されます。

DBCOLUMNFLAGS_WRITE が column_set 列に対して設定されます。

IColumsRowset::GetColumnsRowset

DBCOLUMN_FLAGS で、新しい DBCOLUMNFLAGS フラグ値である DBCOLUMNFLAGS_SS_ISCOLUMNSET が column_set 列に対して設定されます。

column_set 列に対して DBCOLUMN_COMPUTEMODE が DBCOMPUTEMODE_DYNAMIC に設定されます。

IDBSchemaRowset::GetSchemaRowset

DBSCHEMA_COLUMNS が、SS_IS_COLUMN_SET と SS_IS_SPARSE という 2 つの新しい列を返します。

DBSCHEMA_COLUMNS は、column_set のメンバでない列のみを返します。

2 つの新しいスキーマ行セットが追加されています。DBSCHEMA_COLUMNS_EXTENDED は、スパース column_set のメンバシップに関係なくすべての列を返します。DBSCHEMA_SPARSE_COLUMN_SET は、column_set のメンバである列のみを返します。これらの新しい行セットの列と制限は DBSCHEMA_COLUMNS と同じです。

IDBSchemaRowset::GetSchemas

IDBSchemaRowset::GetSchemas の使用可能なスキーマ行セットの一覧に、新しい行セットである DBSCHEMA_COLUMNS_EXTENDED と DBSCHEMA_SPARSE_COLUMN_SET の GUID が含まれます。

ICommand::Execute

select * from table を使用すると、スパース column_set のメンバでないすべての列と、スパース column_set のメンバであるすべての NULL 以外の列の値を含む XML 列が返されます (存在する場合)。

IOpenRowset::OpenRowset

IOpenRowset::OpenRowset は、ICommand::Execute で同じテーブルに対する select * クエリを使用した場合と同じ列を含む行セットを返します。

ITableDefinition

このインターフェイスには、スパース列や column_set 列のための変更はありません。スキーマを変更する必要のあるアプリケーションでは、適切な Transact-SQL を直接実行する必要があります。