使用 bcp 将数据批量复制到 Linux 上的 SQL Server

适用于:Linux 上的 SQL Server

本文介绍如何使用 bcp 实用工具,在 Linux 上的 SQL Server 实例和采用用户指定格式的数据文件之间批量复制数据。

可以使用 bcp 将大量行导入SQL Server表或将数据从SQL Server表导出到数据文件中。 除了与查询选项一起使用时,bcp不需要了解Transact-SQL。 bcp 命令行实用工具适用于在本地或云、Linux、Windows或 Docker 上运行的Microsoft SQL Server,以及Azure SQL 数据库和Azure Synapse Analytics。

本文介绍如何:

  • 使用 bcp in 命令将数据导入表
  • 使用 bcp out 命令从表中导出数据

安装 SQL Server 命令行工具

bcp是SQL Server命令行工具的一部分,这些工具不会随Linux 上的 SQL Server自动安装。 如果尚未在 Linux 计算机上安装 SQL Server 命令行工具,则必须先安装它们。 有关如何安装这些工具的详细信息,请从以下列表中选择 Linux 分发版:

使用 bcp 导入数据

在本教程中,你将在本地SQL Server实例(localhost)上创建一个示例数据库和表,然后使用 bcp 从磁盘上的文本文件加载到示例表中。

创建示例数据库和表

首先,使用本教程其余部分使用的简单表创建示例数据库。

  1. 在您的 Linux 机器上,打开命令行终端。

  2. 将以下命令复制并粘贴到终端窗口中。 这些命令使用 sqlcmd 命令行实用工具在本地SQL Server实例(BcpSampleDB)上创建示例数据库(BcpSampleDB)和表(localhost)。 运行命令前,请记得根据需要替换 username<password>

密码应遵循 SQL Server 默认 密码策略。 默认情况下,密码长度必须至少为 8 个字符,并且包含以下四组中的三个字符:大写字母、小写字母、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 的登录 ID
  • -P:指定登录 ID 的密码
  • -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