Поддержка разреженных столбцов в драйвере OLE DB для SQL Server

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)

Скачать драйвер OLE DB

Драйвер OLE DB для SQL Server поддерживает разреженные столбцы. Дополнительные сведения о разреженных столбцах в SQL Serverсм. в статьях Использование разреженных столбцов и Использование наборов столбцов.

Дополнительные сведения о разреженных столбцах в OLE DB Driver for SQL Server см. в статье Поддержка разреженных столбцов (OLE DB).

Пользовательские сценарии для разреженных столбцов и OLE DB Driver for SQL Server

Следующая таблица содержит обычные пользовательские сценарии работы с разреженными столбцами для пользователей OLE DB Driver for SQL Server.

Сценарий Поведение
select * from table или IOpenRowset::OpenRowset. Возвращает все столбцы, которые не являются элементами набора разреженных столбцов column_set плюс XML-столбец, содержащий значения ненулевых столбцов, являющихся элементами набора разреженных столбцов column_set.
Ссылка на столбец по имени. На столбец можно ссылаться независимо от состояния разреженности или вхождения в column_set.
Доступ к столбцам-элементам column_set через вычисляемый XML-столбец. К столбцам, являющимся элементами column_set, можно получить доступ при помощи выборки column_set по имени; эти столбцы могут содержать значения, вставленные и обновленные при обновлении XML в столбце column_set.

Значение должно соответствовать схеме для столбцов column_set.
Получение метаданных для столбцов в таблице через набор строк схемы DBSCHEMA_COLUMNS без ограничений на столбец (OLE DB). Возвращает строку для всех столбцов, не входящих в column_set. Если таблица содержит разреженный column_set, для него будет возвращена строка.

Обратите внимание, что при этом не возвращаются метаданные для столбцов, являющихся элементами column_set.
Получение данных для всех столбцов, независимо от разреженности или вхождения в column_set. В этом случае может вернуться очень большое число строк. Вызовите метод IDBSchemaRowset::GetRowset для набора строк схемы DBSCHEMA_COLUMNS_EXTENDED.
Получение метаданных только для столбцов, являющихся элементами column_set. В этом случае может вернуться очень большое число строк. Вызовите метод IDBSchemaRowset::GetRowset для набора строк схемы DBSCHEMA_SPARSE_COLUMN_SET.
Определение, является ли столбец разреженным. Обратитесь к столбцу SS_IS_SPARSE результирующего набора строк схемы DBSCHEMA_COLUMNS (ODBC).
Определение, является ли столбец элементом column_set. Обратитесь к столбцу SS_IS_COLUMN_SET набора строк схемы DBSCHEMA_COLUMNS. Или просмотрите dwFlags, возвращенный IColumnsinfo::GetColumnInfo или DBCOLUMNFLAGS в наборе строк, возвращаемом IColumnsRowset::GetColumnsRowset. Для столбцов column_set будет установлен DBCOLUMNFLAGS_SS_ISCOLUMNSET.
Импорт и экспорт разреженных столбцов программой BCP для таблиц без column_set. Отличий от предыдущих версий Драйвера OLE DB для SQL Server в поведении нет.
Импорт и экспорт разреженных столбцов программой BCP для таблиц с column_set. column_set импортируется и экспортируется так же, как XML; то есть varbinary(max) , если он привязан как двоичный тип, или как nvarchar(max) , если он привязан как тип char или типа wchar.

Столбцы, являющиеся элементами набора разреженных столбцов column_set, не экспортируются как отдельные столбцы. Они экспортируются только в составе значения столбца column_set.
Поведение queryout для программы BCP. Отличий от предыдущих версий Драйвера OLE DB для SQL Server в обработке столбцов с явно заданными именами нет.

Сценарии, задействующие импорт и экспорт между таблицами с различными схемами, могут потребовать специальной обработки.

Дополнительные сведения о программе BCP см. в подразделе «Поддержка массового копирования (BCP) для разреженных столбцов» далее в данном разделе.

Работа в клиентах низкого уровня

Клиенты низкого уровня вернут метаданные только для столбцов, которые не являются элементами набора разреженных столбцов column_set для SQLColumns и DBSCHMA_COLUMNS.

Клиенты низкого уровня могут получить доступ к столбцам, являющимся элементами набора разреженных столбцов column_set, по имени. Столбец column_set будет доступен как XML-столбец для клиентов SQL Server 2005 (9.x).

Поддержка массового копирования (BCP) для разреженных столбцов

Нет изменений в интерфейсе API программы BCP в OLE DB для разреженных столбцов или функций для столбцов column_set.

Если таблица содержит column_set, то разреженные столбцы не обрабатываются как отдельные столбцы. Значения всех разреженных столбцов включаются в значение столбца column_set, который экспортируется таким же способом, как XML-столбец, то есть как varbinary(max) , если привязан как двоичному типу, или как nvarchar(max) , если привязан тип char или wchar). При импорте значение column_set должно соответствовать схеме column_set.

Для операций queryout нет изменений в способе обработки столбцов, на которые имеются явные ссылки. Поведение столбцов column_set совпадает с поведением XML-столбцов, и разреженность не имеет значения для обработки именованных разреженных столбцов.

Однако, если queryout используется для экспорта и пользователь ссылается по имени на разреженные столбцы, являющиеся элементами набора разреженных столбцов, нельзя осуществить импорт напрямую в таблицу такой же структуры. Это обусловлено тем, что программа BCP использует для импорта метаданные, согласованные с операцией select *, и не умеет сопоставлять столбцы-элементы column_set с этими метаданными. Для отдельного импорта каждого столбца, входящего в набор разреженных столбцов column_set, необходимо определить представление для таблицы, которая ссылается на необходимые столбцы набора column_set, и выполнить операцию импорта с помощью этого представления.

См. также:

Драйвер OLE DB для SQL Server