SQL Server BCP

В этом руководстве вы узнаете, как использовать утилиту SQL Server BCP для массового копирования данных между экземпляром SQL Server и файлом.

Введение в утилиту SQL Server BCP

BCP означает Bulk Copy Program(программа массового копирования). BCP — это инструмент командной строки, который использует API программы массового копирования, позволяющий выполнять массовое копирование данных между экземпляром SQL Server и файлом.

В целом BCP позволяет:

  • Массовый экспорт данных из таблицы в файл данных
  • Массовый экспорт данных из запроса в файл данных
  • Массовый импорт данных из файла данных в таблицу
  • Генерация файлов формата

Чтобы запустить программу BCP, откройте командную строку и используйте команду bcp.

bcp

Следующая команда показывает версию bcp:

bcp -v

В этой команде -v обозначает версию.

Чтобы просмотреть все параметры bcp, используйте следующую команду:

bcp ?

Выход:

usage: bcp {dbtable | query} {in | out | queryout | format} datafile
  [-m maxerrors]            [-f formatfile]          [-e errfile]
  [-F firstrow]             [-L lastrow]             [-b batchsize]
  [-n native type]          [-c character type]      [-w wide character type]
  [-N keep non-text native] [-V file format version] [-q quoted identifier]
  [-C code page specifier]  [-t field terminator]    [-r row terminator]
  [-i inputfile]            [-o outfile]             [-a packetsize]
  [-S server name]          [-U username]            [-P password]
  [-T trusted connection]   [-v version]             [-R regional enable]
  [-k keep null values]     [-E keep identity values][-G Azure Active Directory Authentication]
  [-h "load hints"]         [-x generate xml format file]
  [-d database name]        [-K application intent]  [-l login timeout]

Команда bcp имеет много опций. И в этом руководстве мы рассмотрим только наиболее часто используемые из них.

Использование SQL Server bcp для экспорта данных из таблицы в файл

Чтобы экспортировать данные из таблицы в плоский файл, используйте следующую команду:

bcp database_name.schema_name.table_name out "path_to_file" -c -U user_name -P password

В этом синтаксисе:

  • bcp — это команда
  • database_name.schema_name.table_name — имя таблицы, в которую вы хотите экспортировать данные
  • «path_to_file» — путь к файлу результата.
  • Параметр -c использует тип символа для формата
  • -U user_name указывает пользователя, который подключается к базе данных. Этот пользователь должен иметь разрешение SELECT на таблицу, которую вы хотите экспортировать.
  • -P пароль указывает пароль пользователя.

Если вы хотите, чтобы программа bcp подключалась к SQL Server с помощью доверенного соединения, используя встроенную безопасность, вы можете использовать параметр -T вместо указания имени пользователя и пароля:

bcp database_name.schema_name.table_name out "path_to_file" -c -T

Например, следующая команда экспортирует данные таблицы «products» из производственной схемы образца базы данных bikestores в файл d:\data\products.txt:

bcp kikestores.production.products out "d:\data\products.txt" -c -U [username] -P [password]

Выход:

Starting copy...
321 rows copied.
Network packet size(bytes): 4096
Clock Time(ms.) Total     : 15     Average :(21400.00 rows per sec.)

Важно отметить, что для успешного выполнения команды папка с данными должна находиться на диске D:.

Использование SQL Server bcp для экспорта результата запроса в файл

Чтобы экспортировать набор результатов запроса в файл, используйте следующую команду:

bcp "query" queryout "path_to_file" -w -U [username] -P [password]

В этой команде вы указываете запрос внутри двойных кавычек, за которым следует bcp и используется опция queryout.

Например, следующая команда экспортирует данные из запроса, который выбирает название продукта и цену по прейскуранту из таблицы production.products в файл:

bcp "select product_name, list_price from bikestores.production.products where model_year=2017" queryout "d:\data\products.txt" -w -U sa -P Abcd1234

Выход:

Starting copy...
85 rows copied.
Network packet size(bytes): 4096
Clock Time(ms.) Total     : 16     Average :(5312.50 rows per sec.)

Использование SQL Server bcp для импорта данных в таблицу из файла

Сначала создайте новую базу данных HR с таблицей людей:

CREATE DATABASE hr;
GO
USE hr;
CREATE TABLE people(
  id int IDENTITY PRIMARY KEY,
  first_name varchar(50) NOT NULL,
  last_name varchar(50) NOT NULL
);
INSERT INTO people(first_name, last_name)
  VALUES('John', 'Doe'),('Jane', 'Doe');
SELECT * FROM people;

Во-вторых, экспортируйте данные из таблицы people в файл:

bcp hr.dbo.people OUT d:\data\people.bcp -T -c

Выход:

Starting copy...
2 rows copied.
Network packet size(bytes): 4096
Clock Time(ms.) Total     : 1      Average :(2000.00 rows per sec.)

В-третьих, усекаем таблицу people:

TRUNCATE TABLE people;

После этого импортируйте данные из d:\data\people.bcp в таблицу people:

bcp hr.dbo.people IN d:\data\people.bcp -T -c

Выход:

Starting copy...
2 rows copied.
Network packet size(bytes): 4096
Clock Time(ms.) Total     : 16     Average :(125.00 rows per sec.)

Наконец, проверьте импорт, выбрав данные из таблицы людей:

SELECT * FROM people;

Выход:

Краткое содержание

  • SQL Server BCP — это программа массового копирования, которая позволяет выполнять массовое копирование данных между экземпляром SQL Server и файлом данных, используя указанный формат файла.
Мирослав С.

Автор статей, ИБ-специалист