Поддержка разреженных столбцов в собственном клиенте SQL Server
SQL Server Native Client поддерживает разреженные столбцы. Дополнительные сведения о разреженных столбцах в SQL Serverсм. в статьях Использование разреженных столбцов и Использование наборов столбцов.
Дополнительные сведения о поддержке разреженных столбцов в SQL Server Native Client см. в разделах Поддержка разреженных столбцов (ODBC) и Поддержка разреженных столбцов (OLE DB).
Сведения о примерах приложений, которые демонстрируют эту функцию, см. в разделе Образцы программирования для SQL Server.
Пользовательские сценарии для разреженных столбцов и собственный клиент SQL Server
В следующей таблице перечислены распространенные пользовательские сценарии для SQL Server Native Client пользователей с разреженными столбцами:
Сценарий | Поведение |
---|---|
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 Native Client из выпуска, предшествующего 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 Native Client из выпуска, предшествующего SQL Server 2008. Однако такое приложение может запрашивать системные представления. |
Определение, является ли столбец разреженным. | Обратитесь к столбцу SS_IS_SPARSE результирующий набор SQLColumns (ODBC). Обратитесь к столбцу SS_IS_SPARSE результирующего набора строк схемы DBSCHEMA_COLUMNS (ODBC). Этот сценарий невозможен в приложении, которое использует SQL Server Native Client из выпуска, предшествующего 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 Native Client из выпуска, предшествующего SQL Server 2008. Однако такое приложение может запрашивать системные представления. |
Импорт и экспорт разреженных столбцов программой BCP для таблиц без column_set . |
Поведение не изменилось по сравнению с предыдущими версиями SQL Server Native Client. |
Импорт и экспорт разреженных столбцов программой BCP для таблиц с column_set . |
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 Native Client, не будут доступны, а также изменения в SQLColumns в ODBC через SQL_SOPT_SS_NAME_SCOPE.
Клиенты нижнего уровня могут обращаться к столбцам, которые являются элементами разреженной column_set
по имени, и column_set
столбец будет доступен в виде XML-столбца для SQL Server клиентов 2005.
Поддержка массового копирования (BCP) для разреженных столбцов
Нет изменений в API-интерфейсе программы BCP ни в ODBC, ни в 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
, и выполнить операцию импорта при помощи этого представления.