Массовое копирование данных в SQL Server на Linux с помощью программы bcp

Применимо к:SQL Server — Linux

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

BCP можно использовать для импорта большого количества строк в таблицы SQL Server или экспорта данных из таблиц SQL Server в файлы данных. За исключением случаев, когда используется с параметром запроса, bcp не требует знаний о Transact-SQL. Служебная программа командной строки bcp работает с Microsoft SQL Server, работающей в локальной среде или в облаке, в Linux, Windows или Docker и База данных SQL Azure и Azure Synapse Analytics.

Из этой статьи вы узнаете, как выполнять следующие задачи:

  • Импорт данных в таблицу с помощью команды bcp in
  • Экспорт данных из таблицы с помощью команды bcp out

Установка программ командной строки SQL Server

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

Импорт данных с помощью bcp

В этом руководстве вы создадите пример базы данных и таблицу на локальном экземпляре SQL Server (localhost), а затем используйте bcp для загрузки в пример таблицы из текстового файла на диске.

Создание образца базы данных и таблицы

Начнем с создания образца базы данных с простой таблицей, которая будет использоваться в оставшейся части этого руководства.

  1. На компьютере Linux откройте терминал ввода команд.

  2. Скопируйте и вставьте в окно терминала следующие команды. Эти команды используют служебную программу командной строки sqlcmd для создания образца базы данных () и таблицы (BcpSampleDBTestEmployees) на локальном экземпляре SQL Server (localhost). При необходимости перед выполнением команд замените username и <your_password>.

Создание базы данных BcpSampleDB:

sqlcmd -S localhost -U sa -P <your_password> -Q "CREATE DATABASE BcpSampleDB;"

Создайте таблицу TestEmployees в базе данных BcpSampleDB:

sqlcmd -S localhost -U sa -P <your_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) в базе данных (BcpSampleDBTestEmployees). При необходимости перед выполнением команд замените имя пользователя и <your_password>.

bcp TestEmployees in ~/test_data.txt -S localhost -U sa -P <your_password> -d BcpSampleDB -c -t  ','

Ниже приведен краткий обзор параметров командной строки, используемых с bcp в этом примере:

  • -S: указывает экземпляр SQL Server, к которому выполняется подключение.
  • -U: указывает идентификатор входа, используемый для подключения к SQL Server.
  • -P: указывает пароль для идентификатора имени входа.
  • -d: указывает базу данных, к которой нужно подключиться.
  • -c: выполняет операцию, используя символьный тип данных.
  • -t: указывает признак конца поля. В качестве признака конца поля для записей в файле данных в этом руководстве используется comma.

Примечание.

В этом примере мы не указываем пользовательский терминатор строк. Когда мы использовали команду cat для создания файла данных, строки в текстовом файле данных были корректно завершены символом newline.

Проверьте успешное завершение импорта данных, выполнив в окне терминала следующую команду: При необходимости перед выполнением команд замените username и <your_password>.

sqlcmd -S localhost -d BcpSampleDB -U sa -P <your_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данных. При необходимости перед выполнением команд замените имя пользователя и <your_password>.

bcp TestEmployees out ~/test_export.txt -S localhost -U sa -P <your_password> -d BcpSampleDB -c -t ','

Проверьте правильность экспорта данных, выполнив в окне терминала следующую команду:

cat ~/test_export.txt

В окне терминала должны отобразиться следующие строки:

1,Jared,Australia
2,Nikita,India
3,Tom,Germany