SQL Server Native Clientでのスパース列のサポート (OLE DB)

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

重要

SQL Server Native Client (SNAC と略されることがよくあります) は、SQL Server 2022 (16.x) と SQL Server Management Studio 19 (SSMS) から削除されました。 SQL Server Native Client OLE DB プロバイダー (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) はどちらも、新しい開発には推奨されません。 今後は、新しい Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server に切り替えてください。

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

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

参照

SQL Server Native Client (OLE DB)