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