- •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 лабораторной работе
- •Доп. Ссылки:
Пример импорта числового значения в экспоненциальном представлении
В этом примере используется следующая таблица:
CREATE TABLE t_float(c1 float, c2 decimal (5,4))
Пользователю необходимо выполнить
массовый импорт данных в таблицу t_float.
Файл данных «C:\t_float-c.dat» содержит данные
в экспоненциальном представлении float,
например:
8.0000000000000002E-28.0000000000000002E-2
Однако инструкция BULK INSERT не сможет
выполнить импорт этих данных непосредственно
в таблицу t_float, так как второй
столбец c2 имеет тип данных
decimal. Поэтому необходим файл
форматирования. В нем данные типа float в
экспоненциальном представлении должны
быть сопоставлены десятичному формату
столбца c2.
Следующий файл форматирования использует
тип данных SQLFLT8 для сопоставления
второго поля данных со вторым столбцом:
<?xml version="1.0"?>
<BCPFORMAT
xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1"
xsi:type="CharTerm" TERMINATOR="\t"
MAX_LENGTH="30"/>
<FIELD ID="2"
xsi:type="CharTerm" TERMINATOR="\r\n"
MAX_LENGTH="30"/> </RECORD> <ROW>
<COLUMN SOURCE="1" NAME="c1"
xsi:type="SQLFLT8"/>
<COLUMN SOURCE="2" NAME="c2"
xsi:type="SQLFLT8"/> </ROW> </BCPFORMAT>
Чтобы задействовать этот файл
форматирования (файл C:\t_floatformat-c-xml.xml)
при импорте тестовых данных в тестовую
таблицу, необходимо выполнить следующую
инструкцию Transact-SQL:
BULK INSERT bulktest..t_float
FROM 'C:\t_float-c.dat' WITH (FORMATFILE='C:\t_floatformat-c-xml.xml');
GO
Разрешения
Требует разрешений INSERT и ADMINISTER BULK OPERATIONS. Кроме того, необходимо разрешение ALTER TABLE, если выполняется одно из следующих условий.
Существуют ограничения, и параметр CHECK_CONSTRAINTS не указан.
Примечание
Ограничения отключены по умолчанию. Чтобы проверить ограничения явно, укажите параметр CHECK_CONSTRAINTS.
Триггеры существуют, и параметр FIRE_TRIGGER не указан.
Примечание
По умолчанию, триггеры не срабатывают. Чтобы явно включить триггеры, укажите параметр FIRE_TRIGGER.
Для импорта значений идентификаторов из файла данных указан параметр KEEPIDENTITY.
Делегирование учетных записей безопасности (Олицетворение)
Если пользователь SQL Server вошел в систему с помощью проверки подлинности Windows, он имеет доступ только к тем файлам, которые доступны учетной записи этого пользователя, вне зависимости от профиля безопасности процесса SQL Server.
Если с помощью программы sqlcmd или osql инструкция BULK INSERT выполняется на одном компьютере, вставка данных происходит в SQL Server на другом компьютере, а аргумент data_file указывает на третий компьютер с помощью UNC-пути, может возникнуть ошибка 4861.
Чтобы решить эту проблему, воспользуйтесь проверкой подлинности SQL Server и укажите имя входа SQL Server, которое использует профиль безопасности учетной записи процесса SQL Server, либо настройте Windows для делегирования учетных записей безопасности. Дополнительные сведения о том, как сделать учетную запись пользователя доступной для делегирования, см. в справке по Windows.
Дополнительные сведения об этих и других вопросах безопасности при использовании инструкции BULK INSERT см. в разделе Массовый импорт данных при помощи инструкции BULK INSERT или OPENROWSET(BULK...).
Примеры
