Выполнение операций массового копирования в собственном клиенте SQL Server

Применимо: 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 поддерживает передачу больших объемов данных в таблицу ИЛИ представление SQL Server или из нее. Данные можно также передать путем указания инструкции SELECT. Данные можно перемещать между SQL Server и файлом данных операционной системы, например asCII-файл. Файлы данных могут иметь различные форматы. Формат определяется для массового копирования в файле форматирования. При необходимости данные можно загружать в программные переменные и передаваться в SQL Server с помощью функций и методов массового копирования.

Пример приложения, демонстрирующий эту функцию, см. в статье Массовое копирование данных с использованием IRowsetFastLoad (OLE DB).

Приложение обычно использует массовое копирование одним из следующих способов.

  • Массовое копирование из таблицы, представления или результирующего набора инструкции Transact-SQL в файл данных, куда данные помещаются в том же формате, что и в таблице или представлении.

    Такой файл называется файлом данных собственного режима.

  • Массовое копирование из таблицы, представления или результирующего набора инструкции Transact-SQL в файл данных, куда данные помещаются в формате, отличном от формата в таблице или представлении.

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

  • Массовое копирование из файлов данных в таблицу или представление.

    При необходимости файл форматирования используется для определения макета файла данных.

  • Загрузите данные в переменные программы, а затем выполните импорт данных в таблицу или представление с помощью функций массового копирования для массового копирования по строке за раз.

Файлы данных, используемые функциями массового копирования, не приходится создавать при помощи другой программы массового копирования. Любая другая система может создать файл данных и форматировать файл в соответствии с определениями массового копирования; Эти файлы можно использовать с программой массового копирования SQL Server для импорта данных в SQL Server. Например, можно экспортировать данные из электронной таблицы в файле с разделителями табуляции, создать файл формата, описывающий файл с разделителями табуляции, а затем использовать программу массового копирования для быстрого импорта данных в SQL Server. Файлы данных, созданные при массовом копировании, можно также импортировать в другие приложения. Например, можно использовать функции массового копирования для экспорта данных из таблицы или представления в файл с разделителями-символами табуляции, который затем можно загрузить в электронную таблицу.

Программисты, пишущие приложения, использующие функции массового копирования, должны следовать основным правилам для обеспечения хорошей производительности массового копирования. Дополнительные сведения о поддержке операций массового копирования в SQL Serverсм. в статье Массовый импорт и экспорт данных (SQL Server).

Ограничения

Определяемый пользователем тип данных CLR должен быть привязан как двоичные данные. Даже если файл форматирования указывает SQLCHAR как тип данных для целевого столбца определяемого пользователем типа, программа bcp будет рассматривать данные как двоичные.

Нельзя использовать инструкцию SET FMTONLY OFF с операциями массового копирования. Ее использование может стать причиной завершения операции массового копирования с ошибкой или получению непредвиденных результатов.

Поставщик OLE DB для собственного клиента SQL Server

Поставщик OLE DB собственного клиента SQL Server реализует два метода для выполнения операций массового копирования с базой данных SQL Server. Первый метод предусматривает использование интерфейса IRowsetFastLoad для операций массового копирования, работающих с памятью, а второй предусматривает использование интерфейса IBCPSession для операций массового копирования, работающих с файлами.

Использование операций массового копирования, работающих с памятью

Поставщик OLE DB собственного клиента SQL Server реализует интерфейс IRowsetFastLoad для предоставления поддержки операций массового копирования на основе памяти SQL Server. В интерфейсе IRowsetFastLoad реализованы методы IRowsetFastLoad::Commit и IRowsetFastLoad::InsertRow.

Включение сеанса для метода IRowsetFastLoad

Потребитель уведомляет поставщика OLE DB собственного клиента SQL Server о необходимости массового копирования, задав свойству источника данных для собственного поставщика данных SQL Server Native Client OLE DB SSPROP_ENABLEFASTLOAD значение VARIANT_TRUE. При использовании свойства, заданного в источнике данных, потребитель создает сеанс поставщика OLE DB собственного клиента SQL Server. Новый сеанс позволяет потребителю получить доступ к интерфейсу IRowsetFastLoad.

Примечание.

Если для инициализации источника данных используется интерфейс IDataInitialize, то необходимо задать свойство SSPROP_IRowsetFastLoad в параметре rgPropertySets метода IOpenRowset::OpenRowset. В противном случае вызов метода OpenRowset возвращает ошибку E_NOINTERFACE.

Включение сеанса массового копирования ограничивает поддержку поставщика OLE DB собственного клиента SQL Server для интерфейсов в сеансе. Сеанс с включенным массовым копированием предоставляет только следующие интерфейсы:

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

Чтобы отключить создание наборов строк с поддержкой массового копирования и вызвать сеанс поставщика OLE DB собственного клиента SQL Server для возврата к стандартной обработке, сбросьте SSPROP_ENABLEFASTLOAD до VARIANT_FALSE.

Наборы строк IRowsetFastLoad

Наборы строк массового копирования поставщиков OLE DB для собственного клиента SQL Server доступны только для записи, но предоставляют интерфейсы, позволяющие потребителю определить структуру таблицы SQL Server. Следующие интерфейсы предоставляются в наборе строк поставщика OLE DB поставщика OLE DB с поддержкой массового копирования SQL Server.

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

Свойства, относящиеся к поставщику, SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS и SSPROP_FASTLOADKEEPIDENTITY, управляют поведением набора строк поставщика OLE DB собственного клиента SQL Server. Свойства указываются в элементе rgProperties члена параметра rgPropertySetsIOpenRowset.

Идентификатор свойства Description
SSPROP_FASTLOADKEEPIDENTITY Столбец: Нет

R/W: чтение и запись

Тип: VT_BOOL

По умолчанию: VARIANT_FALSE

Описание: поддерживает значения идентификаторов, указанные потребителем.

VARIANT_FALSE. Значения столбца удостоверений в таблице SQL Server создаются SQL Server. Любое значение, привязанное к столбцу, игнорируется поставщиком OLE DB собственного клиента SQL Server.

VARIANT_TRUE. Потребитель привязывает метод доступа, предоставляющий значение столбца удостоверений SQL Server. Свойство идентификатора недоступно для столбцов, допускающих значение NULL, так что потребитель предоставляет уникальное значение для каждого вызова IRowsetFastLoad::Insert.
SSPROP_FASTLOADKEEPNULLS Столбец: Нет

R/W: чтение и запись

Тип: VT_BOOL

По умолчанию: VARIANT_FALSE

Описание: поддерживает значение NULL для столбцов с ограничением DEFAULT. Влияет только на столбцы SQL Server, которые принимают ЗНАЧЕНИЕ NULL и применяют ограничение DEFAULT.

VARIANT_FALSE. SQL Server вставляет значение по умолчанию для столбца, когда потребитель поставщика OLE DB собственного клиента SQL Server вставляет строку, содержащую ЗНАЧЕНИЕ NULL для столбца.

VARIANT_TRUE: SQL Server вставляет значение NULL для значения столбца, когда потребитель поставщика OLE DB sql Server Native Client вставляет строку, содержащую ЗНАЧЕНИЕ NULL для столбца.
SSPROP_FASTLOADOPTIONS Столбец: Нет

R/W: чтение и запись

Тип: VT_BSTR

По умолчанию: нет

Описание: это свойство похоже на параметр -h "указание[,...n]" программы bcp. Следующие строки можно использовать в качестве параметров при массовом копировании данных в таблицу.

ORDER(column[ASC | DESC][,...n]): порядок сортировки данных в файле данных. Производительность массового копирования увеличивается, если загружаемый файл данных упорядочен по кластеризованному индексу таблицы.

= ROWS_PER_BATCH bb: количество строк данных на пакет (как bb). Сервер оптимизирует массовую загрузку в соответствии со значением bb. По умолчанию значение аргумента ROWS_PER_BATCH неизвестно.

= KILOBYTES_PER_BATCH cc: количество килобайтов (КБ) данных на пакет (как cc). По умолчанию значение KILOBYTES_PER_BATCH неизвестно.

TABLOCK: блокировка уровня таблицы запрашивается на время операции массового копирования. Применение этого параметра значительно повышает производительность, так как удержание блокировки только в течение операции массового копирования уменьшает вероятность конфликтов блокировок в таблице. Таблица может загружаться одновременно несколькими клиентами, если она не содержит индексов и указан параметр TABLOCK. По умолчанию работа блокировки определяется параметром таблицы table lock on bulk load.

CHECK_CONSTRAINTS: любые ограничения на имя_таблицы проверяются на протяжении операции массового копирования. По умолчанию ограничения не учитываются.

FIRE_TRIGGER: SQL Server использует управление версиями строк для триггеров и сохраняет версии строк в хранилище версий в tempdb. Поэтому оптимизации массовой записи в журнал доступны даже при включенных триггерах. Перед массовым импортом пакета с большим количеством строк с включенными триггерами, возможно, придется увеличить размер базы данных tempdb.

Использование операций массового копирования, работающих с файлами

Поставщик OLE DB собственного клиента SQL Server реализует интерфейс IBCPSession для предоставления поддержки операций массового копирования на основе файлов SQL Server. Интерфейс IBCPSession реализует IBCPSession::BCPColFmt, Методы IBCPSession::BCPColumns, IBCPSession::BCPSession::BCPSession::BCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt и IBCPSession::BCPWriteFmt.

Драйвер ODBC для собственного клиента SQL Server

Драйвер ODBC собственного клиента SQL Server поддерживает ту же поддержку операций массового копирования, которые были частью предыдущих версий драйвера ODBC SQL Server. Сведения об операциях массового копирования с помощью драйвера ODBC собственного клиента SQL Server см. в разделе "Выполнение операций массового копирования( ODBC)".

См. также

Компоненты собственного клиента SQL Server
Свойства источника данных (OLE DB)
Массовый импорт и экспорт данных (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)
Оптимизация производительности массового импорта данных