Поделиться через


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

Функция массового копирования 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 Native Client реализует два метода для выполнения операций массового копирования с SQL Server базой данных. Первый метод предусматривает использование интерфейса IRowsetFastLoad для операций массового копирования, работающих с памятью, а второй предусматривает использование интерфейса IBCPSession для операций массового копирования, работающих с файлами.

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

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

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

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

Примечание

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

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

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

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

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

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

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

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

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

Ч/З Чтение/запись

Тип: VT_BOOL.

Значение по умолчанию: VARIANT_FALSE

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

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

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

Ч/З Чтение/запись

Тип: VT_BOOL.

Значение по умолчанию: VARIANT_FALSE

Описание. Поддерживает значение NULL для столбцов с ограничением DEFAULT. Затрагивает только столбцы SQL Server, которые допускают значение NULL и к которым применено ограничение DEFAULT.

VARIANT_FALSE: SQL Server вставляет значение по умолчанию для столбца, когда потребитель поставщика SQL SERVER NATIVE CLIENT OLE DB вставляет строку, содержащую значение NULL для столбца.

VARIANT_TRUE: SQL Server вставляет значение NULL для значения столбца, когда потребитель поставщика SQL SERVER NATIVE CLIENT OLE DB вставляет строку, содержащую значение NULL для столбца.
SSPROP_FASTLOADOPTIONS Столбец: нет

Ч/З Чтение/запись

Тип: VT_BSTR

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

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

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

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

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

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

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

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

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

Поставщик SQL SERVER NATIVE CLIENT OLE DB реализует интерфейс IBCPSession для предоставления поддержки SQL Server операций массового копирования на основе файлов. В интерфейсе IBCPSession реализованы методы IBCPSession::BCPColFmt, IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt и IBCPSession::BCPWriteFmt.

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

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

См. также:

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