使用 bcp 连接

下载 ODBC 驱动程序

可以在 Linux 和 macOS 上结合使用 bcp 与 Microsoft ODBC Driver for SQL Server。 本页介绍与 bcp 的 Windows 版本之间的区别。

  • 字段终止符是制表符 ("\t")。

  • 行终止符是换行符 ("\n")。

  • 字符模式是不包含扩展字符的 bcp 格式文件和数据文件的首选格式。

注意

命令行参数上的反斜杠 '\' 必须带引号或转义。 例如,若要将某个换行符指定为自定义行终止符,必须使用以下某一机制:

  • -r\\n
  • -r"\n"
  • -r'\n'

以下示例是将表行复制到文本文件的 bcp 命令调用:

bcp AdventureWorks2008R2.Person.Address out test.dat -Usa -Pxxxx -Sxxx.xxx.xxx.xxx

可用选项

在当前版本中,可以使用以下语法和选项:

[database.]schema.table in data_file | out data_file

-a packet_size
指定服务器发出或接收的每个网络数据包的字节数。

-b batch_size
指定每批导入数据的行数。

-c
使用字符数据类型。

-d database_name
指定要连接到的数据库。

-D
使值传递给将解释为数据源名称 (DSN) 的 bcp -S 选项。 有关详细信息,请参阅使用 sqlcmd 进行连接中的“sqlcmd 和 bcp 中的 DSN 支持”。

-e error_file
指定错误文件的完整路径,此文件用于存储 bcp 实用工具无法从文件传输到数据库的所有行。

-E
将导入数据文件中的一个或多个标识值用于标识列。

-f format_file
指定格式化文件的完整路径。

-F first_row
指定要从表中导出或从数据文件导入的第一行的编号。

-G
当连接到 Azure SQL 数据库、Azure SQL 托管实例 或 Azure Synapse Analytics 时,客户端将使用此开关指定该用户使用 Microsoft Entra ID(旧称 Azure Active Directory)来进行身份验证。 只需将它与 -P 选项结合使用即可使用访问令牌身份验证 (v17.8+)。 -G 开关至少需要 bcp 版本 17.6。 要确定你的版本,请执行 bcp -v。

重要

-G 选项仅适用于 Azure SQL 数据库、Azure SQL 托管实例 及 Azure Synapse Analytics。 Linux 或 macOS 目前不支持 Microsoft Entra 交互式身份验证。 Microsoft Entra 集成身份验证需要 Microsoft ODBC Driver 17 for SQL Server 版本 17.6.1 或更高版本,以及正确配置的 Kerberos 环境

-k
指定在操作过程中空列应保留 null 值,而不是所插入列的任何默认值。

-l
指定登录超时。 -l 选项指定在尝试连接到服务器时登录 SQL Server 的超时时间(以秒为单位)。 默认登录超时值为 15 秒。 登录超时必须是介于 0 和 65534 之间的数字。 如果提供的值不是数值或不在此范围内,则 bcp 将生成错误消息。 值 0 指定无限超时。

-L last_row
指定要从表中导出或从数据文件中导入的最后一行的编号。

-m max_errors
指定可能出现的语法错误的上限,超过此上限即导致 bcp 操作取消。

-n
使用数据的本机(数据库)数据类型执行大容量复制操作。

-P password
指定登录 ID 的密码。 在不使用 -U 选项的情况下与 -G 选项结合使用时,则指定一个文件,其中包含访问令牌 (v17.8+)。 令牌文件的格式应为 UTF-16LE(无 BOM)。

可以通过各种方法获取访问令牌。 务必确保访问令牌的每个字节都是正确的,因为它将按原样发送。 下面是一个用于获取访问令牌的示例命令。 该命令使用 Azure CLI 和 Linux 命令,并以适当的格式保存到文件中。 如果系统或终端的默认编码不是 ASCII 或 UTF-8,则可能需要调整 iconv 选项。 一定要小心保护生成的文件,并在不再需要时将其删除。

az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile

-q
bcp 实用工具和 SQL Server 实例之间的连接中,执行 SET QUOTED_IDENTIFIER ON 语句。

-r row_terminator
指定行终止符。

-R
指定使用客户端计算机区域设置中定义的区域格式,将货币、日期和时间数据大容量复制到 SQL Server 中。

-S server
指定要连接的 SQL Server 实例的名称,或者如果使用 -D,则指定 DSN。

-t field_terminator
指定字段终止符。

-T
指定 bcp 实用工具通过信任连接(集成安全性)连接到 SQL Server。

-u
信任服务器证书。 (从 bcp 版本 18 起提供)

-U login_id
指定用于连接到 SQL Server的登录 ID。

-v
报告 bcp 实用工具的版本号和版权。

-w
使用 Unicode 字符执行大容量复制操作。

在此版本中,支持 Latin-1 和 UTF-16 字符。

-Y[s|m|o]
指定连接加密模式。 选项有“严格”、“强制”和“可选”。 使用不带任何参数的 -Y 将使用强制加密模式,等效于 -Ym。 (从 bcp 版本 18 起提供)

不可用选项

在当前版本中,可以使用以下语法和选项:

-C
指定该数据文件中数据的代码页。

-h hint
指定向表或视图大容量导入数据时所使用的一个或多个提示。

-i input_file
指定响应文件的名称。

-N
对非字符数据使用数据的本机(数据库)数据类型,对字符数据使用 Unicode 字符。

-o output_file
指定文件名称,该文件用于接收从命令提示符重定向来的输出。

-V (80 | 90 | 100)
使用早期版本的 SQL Server 的数据类型。

-x
结合使用该格式和 -f format_file 选项一起使用,可生成基于 XML 的格式化文件,而不是默认的非 XML 格式化文件。

另请参阅

使用 sqlcmd 进行连接
发行说明