Поддержка разреженных столбцов в собственном клиенте SQL Server (OLE DB)
Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform 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 | Если используется запрос select * fromtable, то он возвращает все столбцы, не являющиеся членами разреженного column_set, а также столбец XML, содержащий значения всех столбцов со значениями, отличными от NULL, которые являются членами разреженного column_set, если они есть. |
IOpenRowset::OpenRowset | IOpenRowset::OpenRowset возвращает набор строк с теми же столбцами, что и ICommand::Execute, с запросом select * в той же таблице. |
ITableDefinition | Этот интерфейс не изменился для разреженных столбцов или столбцов column_set. Приложения, которым необходимо изменить схему, должны выполнить соответствующий код Transact-SQL напрямую. |
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по