次の方法で共有


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

このトピックでは、スパース列に対する SQL Server Native Client OLE DB のサポートについて説明します。 スパース列の詳細については、「 Sparse Columns Support in SQL Server Native Client」を参照してください。 サンプルについては、「スパース列に対する列およびカタログ メタデータの表示 (OLE DB)」を参照してください。

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 dwFlagscolumn_set列に新しい DBCOLUMNFLAGS フラグ値DBCOLUMNFLAGS_SS_ISCOLUMNSETが設定されます。

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 同じテーブルに対して select * クエリを使用すると、IOpenRowset::OpenRowset から ICommand::Execute と同じ列を持つ行セットが返されます。
ITableDefinition このインターフェイスには、スパース列や column_set 列のための変更はありません。 スキーマを変更する必要のあるアプリケーションでは、適切な Transact-SQL を直接実行する必要があります。

参照

SQL Server Native Client (OLE DB)