- •I лабораторная работа Тема: Массовый импорт и экспорт данных, обработка ошибок
- •Основные сведения
- •Синтаксические обозначения в Transact-sql (Transact-sql)
- •Составные имена
- •Операции массового импорта и массового экспорта
- •Внутри- и внепроцессная операция
- •Файлы форматирования
- •Форматы данных для импорта или экспорта данных
- •Обработчик запросов и массовый импорт
- •Вопросы производительности
- •Управление пакетами для массового импорта данных
- •Ограничения
- •Вопросы производительности
- •Массовый экспорт или импорт документов sqlxml
- •Преобразование типов из символьного в десятичный
- •Пример импорта числового значения в экспоненциальном представлении
- •Делегирование учетных записей безопасности (Олицетворение)
- •А. Применение вертикальной черты в качестве признака конца столбца при импорте данных из файла
- •Б. Применение аргумента fire_triggers
- •В. Применение перевода строки в качестве признака конца строки
- •Дополнительные примеры
- •Программа bcp
- •Поддержка собственного формата файлов данных
- •Вычисляемые столбцы и столбцы типа timestamp
- •Указание идентификаторов, содержащих пробелы или кавычки
- •Проверка данных
- •Массовый экспорт или импорт документов sqlxml
- •А. Копирование строк таблицы в файл данных (с помощью доверительного соединения)
- •Б. Копирование строк таблицы в файл данных (в смешанном режиме проверки подлинности)
- •В. Копирование данных из файла в таблицу
- •Г. Копирование отдельного столбца в файл данных
- •Д. Копирование отдельной строки в файл данных
- •Е. Копирование данных из запроса в файл данных
- •Ж. Создание файла форматирования в формате, отличном от xml
- •З. Создание xml-файла форматирования
- •И. Применение файла форматирования для выполнения массового импорта данных с помощью программы bcp
- •Применение инструкции openrowset с параметром bulk
- •Массовый импорт данных sqlchar, sqlnchar или sqlbinary
- •Массовый экспорт или импорт документов sqlxml
- •А. Использование функции openrowset совместно с инструкцией select и поставщиком ole db для собственного клиента sql Server
- •Б. Использование поставщика ole db для Jet (Майкрософт)
- •В. Использование функции openrowset и другой таблицы в предложении inner join
- •Г. Использование функции openrowset для массовой вставки данных из файла в столбец varbinary(max)
- •Д. Использование поставщика bulk функции openrowset совместно с файлом форматирования для получения строк из текстового файла
- •Дополнительные примеры
- •Примеры массового импорта и экспорта xml-документов
- •Б. Массовый импорт xml-данных в существующую строку
- •Образец файла данных
- •Пример б
- •В. Массовый импорт xml-данных из файла, содержащего dtd
- •Образец таблицы
- •Образец файла форматирования
- •Пример г
- •Д. Массовый экспорт xml-данных
- •Контрольные вопросы к I лабораторной работе
- •Доп. Ссылки:
Обработчик запросов и массовый импорт
Чтобы выполнить массовый импорт данных в экземпляр 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.
Форматы данных для импорта или экспорта данных
Командами 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 фиксирует или откатывает транзакцию для каждого из пакетов.
