次の方法で共有


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

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

OLE DB ドライバーのダウンロード

このトピックでは、OLE DB Driver for SQL Server のスパース列のサポートに関する情報を提供します。 スパース列の詳細については、「OLE DB Driver for SQL Server のスパース列のサポート」を参照してください。 サンプルについては、「スパース列に対する列およびカタログ メタデータの表示 (OLE DB)」を参照してください。

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

SQL Server 2008 (10.0.x) 以降では、新しい 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 (8.x) クライアントと一貫性があります。

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

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

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

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

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

次の OLE DB インターフェイスは、OLE DB Driver for SQL Server でスパース列をサポートするように修正されました。

型またはメンバー関数 説明
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 * fromtable を使用すると、スパース column_set のメンバーでないすべての列と、スパース column_set のメンバーであるすべての NULL 以外の列の値を含む XML 列が返されます (存在する場合)。
IOpenRowset::OpenRowset 同じテーブルに対して select * クエリを使用すると、IOpenRowset::OpenRowset から ICommand::Execute と同じ列を持つ行セットが返されます。
ITableDefinition このインターフェイスには、スパース列や column_set 列のための変更はありません。 スキーマを変更する必要のあるアプリケーションでは、適切な Transact-SQL を直接実行する必要があります。

参照

OLE DB Driver for SQL Server のプログラミング