Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Правка_Руководство к 1 лр.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
116 Кб
Скачать
☆

Обработчик запросов и массовый импорт

Чтобы выполнить массовый импорт данных в экземпляр SQL Server, программа bcp, инструкции BULK INSERT и INSERT ... SELECT * FROM OPENROWSET(BULK...) работают совместно с обработчиком запросов.

Все три метода преобразовывают данные в файл данных в наборах строк OLE DB. Но методы преобразования различаются следующим образом:

  • Программа bcp считывает файл данных и отсылает поток TDS к API-интерфейсу программы массового копирования (Bulk Copy Program, BCP) в SQL Server, который затем преобразует данные в наборы строк OLE DB.

  • Инструкция BULK INSERT и поставщик набора строк OPENROWSET преобразуют данные непосредственно в набор строк OLE DB.

Наборы строк OLE DB затем вставляются в целевую таблицу обработчиком запросов, который планирует и оптимизирует каждую операцию.

Вопросы производительности

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

  • Переключения пакета;

  • Проверка ограничений CHECK;

  • Способ регистрации массовых транзакций. Это имеет важное значение для баз данных, которые обычно используют модель полного восстановления;

  • Упорядочивание экспортированных данных;

  • Импортирование параллельных данных;

  • Блокировка таблицы;

  • Выполнение триггера.

Для операций по массовому экспорту не существует никаких специальных методик по оптимизации. Эти операции используют инструкции SELECT.

  1. Форматы данных для импорта или экспорта данных

Командами bcp, инструкциями BULK INSERT и INSERT... SELECT * FROM OPENROWSET(BULK...) поддерживается использование специализированного файла – «файла форматирования» с целью хранения сведений о формате для каждого поля в файле данных.

BULK INSERT (Transact-SQL)

Выполняет импорт файла данных в таблицу или представление базы данных в формате, указанном пользователем, в SQL Server 2008 R2. Эта инструкция используется для эффективной передачи данных между SQL Server и разнородными источниками данных.

Синтаксис

Transact-SQL

BULK INSERT

   [database_name.[schema_name]. | schema_name.] [table_name | view_name]

      FROM 'data_file'

     [ WITH

    (

   [ [ , ] BATCHSIZE = batch_size ]

   [ [ , ] CHECK_CONSTRAINTS ]

   [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]

   [ [ , ] DATAFILETYPE =

      { 'char' | 'native'| 'widechar' | 'widenative' } ]

   [ [ , ] FIELDTERMINATOR = 'field_terminator' ]

   [ [ , ] FIRSTROW = first_row ]

   [ [ , ] FIRE_TRIGGERS ]

   [ [ , ] FORMATFILE = 'format_file_path' ]

   [ [ , ] KEEPIDENTITY ]

   [ [ , ] KEEPNULLS ]

   [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]

   [ [ , ] LASTROW = last_row ]

   [ [ , ] MAXERRORS = max_errors ]

   [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]

   [ [ , ] ROWS_PER_BATCH = rows_per_batch ]

   [ [ , ] ROWTERMINATOR = 'row_terminator' ]

   [ [ , ] TABLOCK ]

   [ [ , ] ERRORFILE = 'file_name' ]

    )]

Аргументы

database_name – имя базы данных, в которой находится указанная таблица или представление. Если не указано, предполагается текущая база данных.

schema_name – имя схемы таблицы или представления. Указание аргумента schema_name необязательно, но, если этот аргумент не указан и схема пользователя, выполняющего операцию массового импорта, отличается от схемы таблицы или представления, SQL Server возвращает сообщение об ошибке и операция массового импорта не выполняется.

table_name – имя таблицы или представления, куда производится массовый импорт данных. Могут указываться только те представления, в которых все столбцы относятся к одной и той же базовой таблице.

'data_file' – полный путь и имя файла данных, который содержит импортируемые в указанную таблицу или представление данные. Аргумент data_file должен содержать действительный путь с того сервера, на котором запущен SQL Server. Если аргумент data_file является удаленным файлом, имя должно быть в формате UNC.

Имя UNC имеет вид \\Systemname\ShareName\Path\FileName.

BATCHSIZE = batch_size – указывает число строк в одном пакете. Каждый пакет копируется на сервер за одну транзакцию. SQL Server фиксирует или откатывает транзакцию для каждого из пакетов.