12. Массовый импорт и экспорт данных - KattyOG/Database GitHub Wiki
Из лекций:
Массовый импорт означает загрузку данных из файла данных в таблицу SQL Server. Например, можно экспортировать данные из приложения Microsoft Excel в файл данных, а затем выполнить массовый импорт данных в таблицу SQL Server. SQL Server поддерживает массовый экспорт данных (массовых данных) из таблиц SQL Server и импорт массовых данных в таблицу SQL Server. Массовый импорт и массовый экспорт имеют большое значение для эффективной передачи данных между SQL Server и разнородными источниками данных.
В состав служб MSIS входит несколько мастеров, одним из которых является мастер импорта и экспорта SQL Server. Этот мастер может копировать данные из любого источника в таблицы и представления, если для этого источника существует поставщик данных .NET Framework или собственный поставщик данных OLE DB. Для источников данных SQL Server, Плоские файлы, Microsoft Access, Microsoft Excel есть соответствующие поставщики. Чтобы выполнить импорт, нужно запустить созданный мастером пакет. При желании пакет можно сохранить для повторного использования. Запуск мастера импорта и экспорта SQL Server в среде SSMS выполняется так:
- Подключитесь к серверу типа Database Engine,
- Разверните базы данных,
- Правой кнопкой мыши щелкните базу данных, выберите пункт Задачи, затем выберите пункт Импорт данных.
Программа bcp используется для массового копирования данных между экземпляром Microsoft SQL Server и файлом данных в пользовательском формате. С помощью программы bcp можно выполнять импорт большого количества новых строк в таблицы SQL Server или экспорт данных из таблиц в файлы данных. Сведения о синтаксисе команды bcp можно получить, выполнив команду без аргументов. В простейших случаях используются следующие аргументы.
{[[database_name.][schema].]{table_name | view_name}
Имя базы данных database_name и имя схемы schema являются необязательными параметрами.
in data_file
Выполняется копирование из файла data_file в таблицу базы данных или представление.
out data_file
Выполняется копирование из таблицы базы данных или представления в файл data_file. Если указать существующий
файл, то файл перезаписывается.
queryout
Выполняется копирование из запроса.
format
Создается файл форматирования, основанный на указанных параметрах (-n, -c, -w или -N) и разделителях таблиц или
представлений. При выполнении массового копирования данных команда bcp может обратиться к файлу
форматирования, что позволяет избежать повторного ввода данных о формате в интерактивном режиме.
Параметр format требует наличия параметра -f. Для создания XML-файла форматирования также необходим параметр –
x. В качестве значения параметра format необходимо указать nul.
-T
Указывает, что программа bcp устанавливает доверительное соединение с SQL Server с использованием встроенной
безопасности. Не требуются учетные данные безопасности для сетевого пользователя, параметры login_id и password.
Если параметр –T не указан, для входа необходимо указать –U login_id и –P password.
-c
Выполняет операцию, используя символьный тип данных. При использовании этого параметра не запрашивается тип
данных каждого поля. Для хранения данных используется тип char, префиксы отсутствуют, в качестве разделителя полей
используется символ табуляции \t, а в качестве признака конца строки — символ новой строки \r\n.
-S server_name[ \instance_name]
Указывает экземпляр SQL Server, к которому выполняется подключение. Если сервер не указан, то
программа bcp выполняет подключение к экземпляру SQL Server по умолчанию на локальном компьютере. Этот
параметр необходим, когда команда bcp запускается из удаленного компьютера в сети или из локального именованного
экземпляра. Чтобы подключиться к экземпляру по умолчанию SQL Server на сервере, укажите только server_name. Чтобы
подключиться к именованному экземпляру SQL Server, укажите server_name\instance_name.
Пример 1. Массовое копирование символьных данных из файла S.txt в таблицу dbSPJ.dbo.S (с помощью
доверительного соединения):
bcp dbSPJ.dbo.S in Currency.dat -T -c -S .\SQLEXPRESS
Чтобы убедиться в успешном выполнении команды, отобразите в редакторе запросов содержимое таблицы и введите:
SELECT * FROM S
Пример 2. Массовое копирование строк таблицы dbSPJ.dbo.S в файл данных S.txt (с помощью доверительного соединения):
bcp dbSPJ.dbo.S out S.txt -T -c -S .\SQLEXPRESS
Пример 3. Копирование данных из запроса в файл S.txt:
bcp "SELECT SName, Status, City FROM dbSPJ.dbo.S ORDER BY SName" queryout S.txt -c -T -S .\SQLEXPRESS
Пример 4. Создание XML-файла форматирования S.xml:
bcp dbSPJ.dbo.S format nul -T -c -x -f S.xml -S .\SQLEXPRESS
Пример 5. Применение файла форматирования для выполнения массового импорта данных с помощью программы bcp
bcp dbSPJ.dbo.tempS in S.txt -T -f S.xml -S .\SQLEXPRESS
Инструкция BULK INSERT загружает данные из файла данных в таблицу. Принцип работы здесь тот же, что и при выполнении команды bcp с параметром in, однако файл данных считывается процессом SQL Server.
### BULK INSERT dbSPJ.dbo.S FROM 'C:\Documents and Settings\Admin\S.txt'
WITH (DATAFILETYPE = char', FIELDTERMINATOR='\t', ROWTERMINATOR='\n', CODEPAGE='ACP')
Чтобы импортировать групповые данные, вызовите функцию OPENROWSET(BULK…) из предложения SELECT…FROM инструкции INSERT. Основной синтаксис массового импорта данных:
INSERT ... SELECT * FROM OPENROWSET(BULK...)
Для проверки примера необходимо создать образец таблицы T.
USE tempdb
GO
CREATE TABLE T (IntCol int, XmlCol xml)
GO
Перед запуском примера необходимо создать файл в кодировке UTF-8 (C:\Documents and Settings\Admin\S2.xml), содержащий следующий образец, который определяет схему в кодировке UTF-8.
SELECT * FROM S FOR XML AUTO, ELEMENTS
INSERT INTO T(XmlCol)
SELECT * FROM OPENROWSET(BULK 'C:\Documents and Settings\Admin\S2.xml', SINGLE_BLOB) AS x