Применимо:
SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
azure Synapse Analytics Analytics
Platform System (PDW)
Внимание
SQL Server Native Client (SNAC) не поставляется с:
- SQL Server 2022 (16.x) и более поздних версий
- SQL Server Management Studio 19 и более поздних версий
Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений.
Для новых проектов используйте один из следующих драйверов:
Сведения о SQLNCLI, которые поставляется в качестве компонента SQL Server ядро СУБД (версии 2012–2019), см. в этом исключении жизненного цикла поддержки.
SQL Server Native Client поддерживает разреженные столбцы. Дополнительные сведения о разреженных столбцах в SQL Server см. в разделе "Использование разреженных столбцов " и "Использование наборов столбцов".
Дополнительные сведения о поддержке разреженных столбцов в собственном клиенте SQL Server см. в разделах Поддержка разреженных столбцов (ODBC) и поддержка разреженных столбцов (OLE DB).
Пользовательские сценарии для разреженных столбцов и собственный клиент 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 (10.0.x). Однако такое приложение может напрямую запрашивать системные представления. |
Получение метаданных только для столбцов, являющихся элементами 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 (10.0.x). Однако такое приложение может запрашивать системные представления. |
Определение, является ли столбец разреженным. |
Обратитесь к столбцу SS_IS_SPARSE результирующий набор SQLColumns (ODBC).
Обратитесь к столбцу SS_IS_SPARSE результирующего набора строк схемы DBSCHEMA_COLUMNS (ODBC).
Этот сценарий невозможен из приложения, использующего собственный клиент SQL Server из выпуска до SQL Server 2008 (10.0.x). Однако такое приложение может запрашивать системные представления. |
Определение, является ли столбец элементом 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 (10.0.x). Однако такое приложение может запрашивать системные представления. |
Импорт и экспорт разреженных столбцов программой 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 Native Client не изменяются.
Сценарии, задействующие импорт и экспорт между таблицами с различными схемами, могут потребовать специальной обработки.
Дополнительные сведения о программе BCP см. в подразделе «Поддержка массового копирования (BCP) для разреженных столбцов» далее в данном разделе. |
Работа в клиентах низкого уровня
Клиенты нижнего уровня возвращают метаданные только для столбцов, не являющихся членами разреженных column_set для SQLColumns и DBSCHEMA_COLUMNS. Дополнительные наборы строк схемы OLE DB, представленные в SQL Server 2008 (10.0.x), не будут доступны и не будут изменяться в SQLColumns в ODBC через SQL_SOPT_SS_NAME_SCOPE.
Клиенты нижнего уровня могут получить доступ к столбцам, которые являются членами разреженных column_set по имени, и столбец column_set будет доступен в виде XML-столбца для клиентов SQL Server 2005 (9.x).
Поддержка массового копирования (BCP) для разреженных столбцов
В ODBC или OLE DB для разреженных столбцов или функций column_set нет изменений в API BCP.
Если таблица содержит 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, и выполнить операцию импорта с помощью этого представления.
См. также
Программирование собственного клиента SQL Server