稀疏列支持 (OLE DB)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics 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 值的列设置该值 。 可以通过 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 (8.x) 客户端一致,如下所示:

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

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

  • 不为 column_set 列设置 DBCOLUMNFLAGS_SS_ISCOLUMNSET 。

  • 为 column_set 列设置 DBCOMPUTEMODE_NOTCOMPUTED 。

OLE DB 对稀疏列的支持

在 OLE DB Driver for SQL Server 中修改了以下 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 如果使用了 select * from table,它将返回非稀疏column_set成员的所有列,以及一个 XML 列,其中包含属于稀疏column_set的所有非 null 列的值(如果存在)。
IOpenRowset::OpenRowset IOpenRowset::OpenRowset 通过对同一表执行 select * 查询返回与 ICommand::Execute 具有相同列的行集。
ITableDefinition 对于稀疏列或 column_set 列,该接口没有更改 。 必须进行架构修改的应用程序必须直接执行正确的 Transact-SQL。

另请参阅

适用于 SQL Server 的 OLE DB 驱动程序编程