Массовое копирование данных в SQL Server на Linux с помощью программы bcp
Область применения: SQL Server — Linux
В этой статье показано, как использовать служебную программу bcp для массового копирования данных между экземпляром SQL Server на Linux и файлом данных в указанном пользователем формате.
BCP можно использовать для импорта большого количества строк в таблицы SQL Server или экспорта данных из таблиц SQL Server в файлы данных. За исключением случаев, когда используется с опцией queryout, bcp не требует знания Transact-SQL. Программа командной строки bcp работает с Microsoft SQL Server, который может быть развернут в локальной среде или облаке, а также в средах Linux, Windows или Docker, в базе данных Azure SQL и аналитической платформе Azure Synapse Analytics.
Из этой статьи вы узнаете, как выполнять следующие задачи:
- Импорт данных в таблицу с помощью команды
bcp in
- Экспорт данных из таблицы с помощью команды
bcp out
Установка программ командной строки SQL Server
bcp является частью средств командной строки SQL Server, которые не устанавливаются автоматически с SQL Server на Linux. Если вы еще не установили средства командной строки SQL Server на компьютере Linux, их необходимо установить. Чтобы получить дополнительные сведения об установке программ, выберите нужный дистрибутив Linux из следующего списка:
Импорт данных с помощью bcp
В этом руководстве вы создадите пример базы данных и таблицу на локальном экземпляре SQL Server (localhost
), а затем используйте bcp для загрузки в пример таблицы из текстового файла на диске.
Создание образца базы данных и таблицы
Начнем с создания образца базы данных с простой таблицей, которая будет использоваться в оставшейся части этого руководства.
На компьютере Linux откройте терминал ввода команд.
Скопируйте и вставьте в окно терминала следующие команды. Эти команды используют служебную программу командной строки sqlcmd для создания образца базы данных () и таблицы (
BcpSampleDB
TestEmployees
) на локальном экземпляре SQL Server (localhost
). При необходимости перед выполнением команд заменитеusername
и<password>
.
Пароль должен следовать политике паролей sql Server по умолчанию. По умолчанию пароль должен содержать по крайней мере восемь символов и содержать символы из трех из следующих четырех наборов: прописные буквы, строчные буквы, цифры base-10 и символы. Пароли могут содержать до 128 символов. Используйте пароли, которые являются максимально длинными и сложными.
Создание базы данных BcpSampleDB
:
sqlcmd -S localhost -U sa -P <password> -Q "CREATE DATABASE BcpSampleDB;"
Создайте таблицу TestEmployees
в базе данных BcpSampleDB
:
sqlcmd -S localhost -U sa -P <password> -d BcpSampleDB -Q "CREATE TABLE TestEmployees (Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY, Name NVARCHAR(50), Location NVARCHAR(50));"
Создание файла исходных данных
Скопируйте и вставьте в окно терминала следующую команду. Мы используем встроенную команду cat
для создания образца текстового файла с данными с тремя записями; сохраните файл в домашнем каталоге под именем ~/test_data.txt
. Поля в записях разделяются запятыми.
cat > ~/test_data.txt << EOF
1,Jared,Australia
2,Nikita,India
3,Tom,Germany
EOF
Проверьте правильность создания файла данных, выполнив в окне терминала следующую команду:
cat ~/test_data.txt
В окне терминала должны отобразиться следующие строки:
1,Jared,Australia
2,Nikita,India
3,Tom,Germany
Импорт данных из исходного файла данных
Скопируйте и вставьте в окно терминала следующие команды. Эта команда использует bcp для подключения к локальному экземпляру SQL Server () и импорта данных из файла данных (localhost
) в таблицу (~/test_data.txt
) в базе данных (TestEmployees
BcpSampleDB
). При необходимости перед выполнением команд замените имя пользователя и <password>
.
bcp TestEmployees in ~/test_data.txt -S localhost -U sa -P <password> -d BcpSampleDB -c -t ','
Ниже приведен краткий обзор параметров командной строки, используемых с bcp в этом примере:
-
-S
: указывает экземпляр SQL Server, к которому выполняется подключение. -
-U
: указывает идентификатор входа, используемый для подключения к SQL Server. -
-P
: указывает пароль для идентификатора имени входа. -
-d
: указывает базу данных, к которой нужно подключиться. -
-c
: выполняет операцию, используя символьный тип данных. -
-t
: указывает признак конца поля. Мы используемcomma
в качестве разделителя полей для записей в нашем файле данных.
Примечание.
В этом примере мы не указываем пользовательский терминатор строк. Когда мы использовали команду newline
для создания файла данных, строки в текстовом файле данных были корректно завершены символом cat
.
Проверьте успешное завершение импорта данных, выполнив в окне терминала следующую команду: При необходимости перед выполнением команд замените username
и <password>
.
sqlcmd -S localhost -d BcpSampleDB -U sa -P <password> -I -Q "SELECT * FROM TestEmployees;"
Должны отобразиться следующие результаты:
Id Name Location
----------- ------------------- -------------------
1 Jared Australia
2 Nikita India
3 Tom Germany
Экспорт данных с помощью bcp
В этом руководстве вы используете bcp для экспорта данных из примера таблицы, созданной ранее в новый файл данных.
Скопируйте и вставьте в окно терминала следующие команды. Эти команды используют служебную программу командной строки bcp для экспорта данных из таблицы TestEmployees
в BcpSampleDB
новый файл ~/test_export.txt
данных. При необходимости перед выполнением команд замените имя пользователя и <password>
.
bcp TestEmployees out ~/test_export.txt -S localhost -U sa -P <password> -d BcpSampleDB -c -t ','
Проверьте правильность экспорта данных, выполнив в окне терминала следующую команду:
cat ~/test_export.txt
В окне терминала должны отобразиться следующие строки:
1,Jared,Australia
2,Nikita,India
3,Tom,Germany