Поддержка разреженных столбцов в собственном клиенте SQL Server
Собственный клиент SQL Server поддерживает разреженные столбцы. Дополнительные сведения о разреженных столбцах в 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 в поведении нет. |
Импорт и экспорт разреженных столбцов программой BCP для таблиц с column_set. |
column_set импортируется и экспортируется таким же способом, как в XML; то есть, как varbinary(max), если привязан как двоичному типу, или как nvarchar(max), если привязан к типу char или wchar. Столбцы, являющиеся элементами разреженного column_set, не экспортируются как различные столбцы, они экспортируются только в значение column_set. |
поведение queryout для программы BCP. |
Отличий от предыдущих версий собственного клиента SQL Server в обработке столбцов с явно заданными именами нет. Сценарии, задействующие импорт и экспорт меду таблицами с различными схемами, могут потребовать специальной обработки. Дополнительные сведения о программе 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 и столбец ntext для клиентов SQL Server 2000.
Поддержка массового копирования (BCP) для разреженных столбцов
Как в ODBC, так и в OLE DB нет изменений в API-интерфейсе программы BCP для разреженных столбцов или функций 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 и выполнить операцию импорта при помощи этого представления.