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

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform 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