Поделиться через


Поддержка разреженных столбцов в собственном клиенте SQL Server (OLE DB)

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Внимание

Собственный клиент SQL Server (часто сокращенный SNAC) был удален из SQL Server 2022 (16.x) и SQL Server Management Studio 19 (SSMS). Поставщик OLE DB собственного клиента SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для новой разработки. Перейдите на новый драйвер Microsoft OLE DB (MSOLEDBSQL) для SQL Server .

В этом разделе содержатся сведения о поддержке OLE DB собственного клиента SQL Server для разреженных столбцов. Дополнительные сведения о разреженных столбцах см. в разделе "Поддержка разреженных столбцов" в собственном клиенте SQL Server. Например, отображение метаданных столбца и каталога для разреженных столбцов (OLE DB).

Метаданные инструкции OLE DB

Начиная с SQL Server 2008 (10.0.x), доступно новое значение флага DBCOLUMNFLAGS, DBCOLUMNFLAGS_SS_ISCOLUMNSET. Это значение должно задаваться для столбцов со значениями column_set. Флаг DBCOLUMNFLAGS можно получить с помощью параметра dwFlags IColumnsInfo::GetColumnsInfo и столбца DBCOLUMN_FLAGS набора строк, возвращаемого IColumnsRowset::GetColumnsRowset.

Метаданные каталога OLE DB

В DBSCHEMA_COLUMNS добавлены два дополнительных столбца SQL Server.

Имя столбца Тип данных Значения/комментарии
SS_IS_SPARSE DBTYPE_BOOL Если столбец является разреженным, то значение VARIANT_TRUE. В противном случае — значение VARIANT_FALSE.
SS_IS_COLUMN_SET DBTYPE_BOOL Если столбец является разреженным столбцом column_set, то значение VARIANT_TRUE. В противном случае значение VARIANT_FALSE.

Кроме этого, были добавлены два дополнительных набора строк схемы. Эти наборы строк имеют ту же структуру, что и 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 были изменены в собственном клиенте SQL Server для поддержки разреженных столбцов:

Тип или функция-элемент Description
IColumnsInfo::GetColumnsInfo Новое значение DBCOLUMNFLAGS_SS_ISCOLUMNSET флага DBCOLUMNFLAGS задается для столбцов column_set в dwFlags.

Значение DBCOLUMNFLAGS_WRITE устанавливается для столбцов column_set.
IColumsRowset::GetColumnsRowset Новое значение DBCOLUMNFLAGS_SS_ISCOLUMNSET флага DBCOLUMNFLAGS задается для столбцов column_set в DBCOLUMN_FLAGS.

DBCOLUMN_COMPUTEMODE устанавливается в значение DBCOMPUTEMODE_DYNAMIC для столбцов column_set.
IDBSchemaRowset::GetSchemaRowset DBSCHEMA_COLUMNS возвращает два новых столбца: SS_IS_COLUMN_SET и SS_IS_SPARSE.

DBSCHEMA_COLUMNS возвращает только те столбцы, которые не являются членами column_set.

Добавлены два новых набора строк схемы: DBSCHEMA_COLUMNS_EXTENDED возвращает все столбцы независимо от разреженности членства column_set . DBSCHEMA_SPARSE_COLUMN_SET возвращает только те столбцы, которые являются членами столбца column_set. Новые наборы строк содержат те же столбцы и ограничения, что и DBSCHEMA_COLUMNS.
IDBSchemaRowset::GetSchemas Метод IDBSchemaRowset::GetSchemas включает идентификаторы GUID для новых наборов строк DBSCHEMA_COLUMNS_EXTENDED и DBSCHEMA_SPARSE_COLUMN_SET в списке доступных наборов строк схемы.
ICommand::Execute Если используется выбор * из таблицы, он возвращает все столбцы, которые не являются элементами разреженного column_set, а также XML-столбец, содержащий значения всех столбцов, отличных от NULL, которые являются членами разреженных column_set, если они присутствуют.
IOpenRowset::OpenRowset IOpenRowset::OpenRowset возвращает набор строк с теми же столбцами, что и ICommand::Execute, с запросом select * в той же таблице.
ITableDefinition Этот интерфейс не изменился для разреженных столбцов или столбцов column_set. Приложения, которым необходимо изменить схему, должны выполнить соответствующий код Transact-SQL напрямую.

См. также

SQL Server Native Client (OLE DB)