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

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)

Скачать драйвер OLE DB

Функция массового копирования 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 Driver for SQL Server о необходимости массового копирования, устанавливая значение VARIANT_TRUE для свойства источника данных SSPROP_ENABLEFASTLOAD, которое определено в OLE DB Driver for SQL Server. Установив это свойство для источника данных, потребитель создает сеанс OLE DB Driver for SQL Server. Новый сеанс позволяет потребителю получить доступ к интерфейсу IRowsetFastLoad.

Примечание.

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

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

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

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

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

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

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

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

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

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

Тип: VT_BOOL

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

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

VARIANT_FALSE. Значения столбца удостоверений в таблице SQL Server создаются SQL Server. Любое значение, привязанное к столбцу, игнорируется OLE DB Driver for 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 вставляет строку, содержащую ЗНАЧЕНИЕ 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.

См. также

Возможности драйвера OLE DB для SQL Server
Свойства источника данных (OLE DB)
Массовый импорт и экспорт данных (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)