スパース列のサポート (OLE DB)
このトピックでは、SQL Server Native Client OLE DB でのスパース列のサポートについて説明します。 スパース列の詳細については、「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 |
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 を直接実行する必要があります。 |