スパース列のサポート (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 | dwFlags のcolumn_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 を直接実行する必要があります。 |