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


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

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

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

Сведения о примерах приложений, демонстрирующих эту функцию, см. в примерах программирования данных SQL Server.

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

В следующей таблице приведены общие сценарии пользователей для пользователей собственного клиента 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 столбцов.
Получение метаданных для всех столбцов таблицы с помощью SQLColumns с помощью шаблона поиска столбцов NULL или %( ODBC); или через набор строк схемы DBSCHEMA_COLUMNS без ограничения столбца (OLE DB). Возвращает строку для всех столбцов, которые не являются элементами.column_set Если в таблице есть разреженная column_setстрока, для нее будет возвращена строка.

Обратите внимание, что это не возвращает метаданные для столбцов, являющихся членами объекта column_set.
Извлеките метаданные для всех столбцов независимо от разреженности или членства в ней column_set. В этом случае может вернуться очень большое число строк. Задайте для поля дескриптора SQL_SOPT_SS_NAME_SCOPE значение SQL_SS_NAME_SCOPE_EXTENDED и вызов SQLColumns (ODBC).

Вызов IDBSchemaRowset::GetRowset для набора строк схемы DBSCHEMA_COLUMNS_EXTENDED (OLE DB).

Этот сценарий невозможен из приложения, использующего собственный клиент SQL Server из выпуска до SQL Server 2008. Однако такое приложение может напрямую запрашивать системные представления.
Получение метаданных только для столбцов, являющихся членами объекта column_set. В этом случае может вернуться очень большое число строк. Задайте для поля дескриптора SQL_SOPT_SS_NAME_SCOPE значение SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET и вызов SQLColumns (ODBC).

Вызов IDBSchemaRowset::GetRowset для набора строк схемы DBSCHEMA_SPARSE_COLUMN_SET (OLE DB).

Этот сценарий невозможен из приложения, использующего собственный клиент SQL Server из выпуска до SQL Server 2008. Однако такое приложение может запрашивать системные представления.
Определение, является ли столбец разреженным. Обратитесь к столбцу SS_IS_SPARSE результирующий набор SQLColumns (ODBC).

Обратитесь к столбцу SS_IS_SPARSE результирующего набора строк схемы DBSCHEMA_COLUMNS (ODBC).

Этот сценарий невозможен из приложения, использующего собственный клиент SQL Server из выпуска до SQL Server 2008. Однако такое приложение может запрашивать системные представления.
Определите, является ли столбец .column_set Обратитесь к столбцу SS_IS_COLUMN_SET результирующий набор SQLColumns. Кроме того, обратитесь к атрибуту конкретного столбца SQL Server SQL_CA_SS_IS_COLUMN_SET (ODBC).

Обратитесь к столбцу SS_IS_COLUMN_SET набора строк схемы DBSCHEMA_COLUMNS. Или просмотрите dwFlags, возвращенный IColumnsinfo::GetColumnInfo или DBCOLUMNFLAGS в наборе строк, возвращаемом IColumnsRowset::GetColumnsRowset. Для column_set столбцов будет задано DBCOLUMNFLAGS_SS_ISCOLUMNSET (OLE DB).

Этот сценарий невозможен из приложения, использующего собственный клиент SQL Server из выпуска до SQL Server 2008. Однако такое приложение может запрашивать системные представления.
Импорт и экспорт разреженных столбцов по BCP для таблицы без column_set. Изменения в поведении предыдущих версий собственного клиента SQL Server не изменяются.
Импорт и экспорт разреженных столбцов для таблицы с помощью column_setBCP. Импортируется column_set и экспортируется так же, как и XML; то есть, как varbinary(max) если бы он был привязан как двоичный тип, или как nvarchar(max) если бы он был привязан как char тип или тип wchar .

Столбцы, которые являются элементами разрежений column_set , не экспортируются в виде отдельных столбцов; они экспортируются только в значении column_set.
queryout поведение для BCP. Изменения в обработке явно именованных столбцов из предыдущих версий SQL Server Native Client не изменяются.

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

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

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

Клиенты нижнего уровня возвращают метаданные только для столбцов, не являющихся членами разреженных column_set для SQLColumns и DBSCHMA_COLUMNS. Дополнительные наборы строк схемы OLE DB, представленные в собственном клиенте SQL Server 2008, не будут доступны и не будут изменяться в SQLColumns в ODBC через SQL_SOPT_SS_NAME_SCOPE.

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

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

В ODBC или OLE DB для разреженных столбцов или column_set функций api BCP нет.

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

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

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

См. также

Программирование собственного клиента SQL Server