稀疏列支持 (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 值的列设置该值。 可以通过 IColumnsInfo::GetColumnsInfo 的 dwFlags 参数和 IColumnsRowset::GetColumnsRowset 返回的行集的 DBCOLUMN_FLAGS 列来检索 DBCOLUMNFLAGS 标志。

OLE DB 目录元数据

其他两个特定于 SQL Server 的列已添加到 DBSCHEMA_COLUMNS 中。

列名称 数据类型 值/注释
SS_IS_SPARSE DBTYPE_BOOL 如果该列是稀疏列,它将具有值 VARIANT_TRUE;否则,为 VARIANT_FALSE。
SS_IS_COLUMN_SET DBTYPE_BOOL 如果该列是稀疏 column_set 列,则它具有值 VARIANT_TRUE;否则,为 VARIANT_FALSE。

还添加了其他两个架构行集。 这些行集具有与 DBSCHEMA_COLUMNS 相同的结构,但返回不同内容。 不管 column_set 成员身份是什么,DBSCHEMA_COLUMNS_EXTENDED 都将返回所有列。 DBSCHEMA_SPARSE_COLUMN_SET 仅返回属于稀疏 column_set 的成员的列。

OLE DB DataTypeCompatibility 行为

使用DataTypeCompatibility=80(在连接字符串中)的行为与 SQL Server 2000 客户端一致,如下所示:

  • 新架构行集是不可见的,并且在架构行集中没有它们的行。

  • COLUMNS 行集中的新列是不可见的。

  • 不为 column_set 列设置 DBCOLUMNFLAGS_SS_ISCOLUMNSET。

  • column_set 列设置 DBCOMPUTEMODE_NOTCOMPUTED。

OLE DB 对稀疏列的支持

SQL Server Native Client 中修改了以下 OLE DB 接口以支持稀疏列:

类型或成员函数 说明
IColumnsInfo::GetColumnsInfo 为 dwFlags 中的列设置column_set新的 DBCOLUMNFLAGS 标志值DBCOLUMNFLAGS_SS_ISCOLUMNSET。

column_set 列设置了 DBCOLUMNFLAGS_WRITE。
IColumsRowset::GetColumnsRowset 为 DBCOLUMN_FLAGS 中的 column_set 列设置了新的 DBCOLUMNFLAGS 标记值 DBCOLUMNFLAGS_SS_ISCOLUMNSET。

对于 column_set 列,将 DBCOLUMN_COMPUTEMODE 设置为 DBCOMPUTEMODE_DYNAMIC。
IDBSchemaRowset::GetSchemaRowset DBSCHEMA_COLUMNS 返回两个新列:SS_IS_COLUMN_SET 和 SS_IS_SPARSE。

DBSCHEMA_COLUMNS 仅返回不属于 column_set 成员的列。

已添加两个新架构行集:不管 column_set 成员身份的稀疏性如何,DBSCHEMA_COLUMNS_EXTENDED 都将返回所有列。 DBSCHEMA_SPARSE_COLUMN_SET 仅返回属于 column_set 成员的列。 这些新行集具有与 DBSCHEMA_COLUMNS 相同的列和限制。
IDBSchemaRowset::GetSchemas IDBSchemaRowset::GetSchemas 将新行集 DBSCHEMA_COLUMNS_EXTENDED 和 DBSCHEMA_SPARSE_COLUMN_SET 的 GUID 包括在可用架构行集的列表中。
ICommand::Execute 如果使用从表中选择 *,则返回非稀疏column_set成员的所有列,以及包含属于稀column_set疏成员的所有非 null 列的值的 XML 列(如果存在)。
IOpenRowset::OpenRowset IOpenRowset::OpenRowset 通过对同一表执行 select * 查询返回与 ICommand::Execute 具有相同列的行集。
ITableDefinition 对于稀疏列或 column_set 列,该接口没有更改。 必须进行架构修改的应用程序必须直接执行正确的 Transact-SQL。

另请参阅

SQL Server Native Client (OLE DB)