稀疏列支持 (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。 |