适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统 (PDW)
Microsoft Fabric 中的仓库
Microsoft Fabric 中的 SQL 数据库
大容量复制程序实用工具 (bcp) 以用户指定的格式在SQL Server实例和数据文件之间大容量复制数据。
使用bcp实用工具将大量新行导入SQL Server表中,或将数据从表中导出到数据文件中。 除非与 queryout 选项一起使用,否则使用该实用工具不需要了解 Transact-SQL 知识。 若要将数据导入表中,必须使用为该表创建的格式化文件,或者了解表的结构及其列有效的数据类型。
有关在系统上安装的版本 bcp 、系统要求以及如何获取 bcp的详细信息,请参阅 “下载并安装 bcp 实用工具”。
注释
bcp 数据文件不包含任何架构或格式信息。 如果用于 bcp 备份数据,然后稍后删除或更改源表,则需要相同的表定义或格式化文件才能将数据导入回。
有关用于 bcp 语法的语法约定,请参阅 Transact-SQL 语法约定(Transact-SQL)。
如何使用 bcp
有关如何使用 bcp(包括示例命令)的信息,请参阅 如何使用 bcp 实用工具。
在 Linux 和 macOS 上使用 bcp
有关如何在 macOS 和 Linux 上安装命令行工具的信息,请参阅 在 Linux 上安装 sqlcmd 和 bcp SQL Server 命令行工具。
Linux 和 macOS 上的 bcp 注意事项
字段分隔符是制表符 (
\t)。行终止符是换行符 (
\n)。对于 SQL Server 到 SQL Server 的传输,请使用本机格式(
-n)。 仅当数据跨入非 SQL Server 系统或数据文件不应包含扩展字符时,才使用字符格式(-c)。 有关详细信息,请参阅 字符模式和本机模式最佳做法。在命令行参数中,必须对反斜杠 (
\) 进行引号包围或转义。 例如,若要将换行符指定为自定义行终止符,请使用下列机制之一:-r\\n-r"\n"-r'\n'
TDS 8.0 支持
SQL Server 2025(17.x)为 bcp 实用工具引入了 TDS 8.0 支持。
Syntax
bcp [ database_name. ] schema. { table_name | view_name | "query" }
{ in data_file | out data_file | queryout data_file | format nul }
[ -a packet_size ]
[ -b batch_size ]
[ -c ]
[ -C { ACP | OEM | RAW | code_page } ]
[ -d database_name ]
[ -D ]
[ -e err_file ]
[ -E ]
[ -f format_file ]
[ -F first_row ]
[ -G Microsoft Entra authentication ]
[ -H hostname_in_certificate ]
[ -h"hint [ , ...n ] " ]
[ -i input_file ]
[ -J server_certificate ]
[ -k ]
[ -K application_intent ]
[ -l login_timeout ]
[ -L last_row ]
[ -m max_errors ]
[ -n ]
[ -N ]
[ -o output_file ]
[ -P password ]
[ -q ]
[ -r row_term ]
[ -R ]
[ -S [ server_name [ \instance_name ] ] ]
[ -t field_term ]
[ -T ]
[ -U login_id ]
[ -u ]
[ -v ]
[ -V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 | 170) ]
[ -w ]
[ -x ]
[ -Y [ s | m | o ] ]
[ -z[0|1] ]
命令行选项
下表列出了可用的 bcp命令行选项及其支持的操作系统。
| 命令行选项 | 在 Windows 上受支持 | Linux 和 macOS 上受支持 |
|---|---|---|
| 对象和传输模式 | ||
| [database_name.]schema,{table_name | view_name | “query”} | 是的 | 是的 |
| {indata_file | outdata_file | queryoutdata_file | format nul} | 是的 | 是的 |
| -q | 是的 | 是的 |
| 连接和身份验证 | ||
| -S [server_name[\instance_name]] | 是的 | 是的 |
| -d database_name | 是的 | 是的 |
| -U login_id | 是的 | 是的 |
| -P 密码 | 是的 | 是的 |
| -G Microsoft Entra 身份验证 | 是的 | 是的 |
| -D | 是的 | 是的 |
| -K application_intent | 是的 | 是的 |
| -l login_timeout | 是的 | 是的 |
| -H hostname_in_certificate | 是的 | 是的 |
| -J server_certificate | 是的 | 是的 |
| -T | 是的 | 是的 |
| -Y[s| m| o] | 是 1 | 是 1 |
| 数据表示形式 | ||
| -c | 是的 | 是的 |
| -C { ACP |OEM |RAW | code_page } | 是的 | 否 |
| -n | 是的 | 是的 |
| -N | 是的 | 否 |
| -w | 是的 | 是的 |
| -z[0|1] | 否 | 是 2 |
| 格式化文件 | ||
| -f format_file | 是的 | 是的 |
| -x | 是的 | 否 |
| 批处理和性能 | ||
| -a packet_size | 是的 | 是的 |
| -b batch_size | 是的 | 是的 |
| -h“hint [,...n]” | 是的 | 否 |
| -m max_errors | 是的 | 是的 |
| -F first_row | 是的 | 是的 |
| -L 最后一行 | 是的 | 是的 |
| -r row_term | 是的 | 是的 |
| -t field_term | 是的 | 是的 |
| 值处理 | ||
| -k | 是的 | 是的 |
| -E | 是的 | 是的 |
| 文件 I/O 和日志记录 | ||
| -i input_file | 是的 | 否 |
| -o output_file | 是的 | 否 |
| -e err_file | 是的 | 是的 |
| 兼容性和版本控制 | ||
| -V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 | 170) | 是的 | 否 |
| -u | 是 1 | 是 1 |
| 其他选项 | ||
| -R | 是的 | 是的 |
| -v | 是的 | 是的 |
1 需要bcp版本 18 或更高版本,该版本随 SQL Server 2025(17.x)提供。
2 ODBC 18.6.1.1 及更高版本。
对象和传输模式
database_name
包含指定表或视图的数据库的名称。 如果未指定此参数,将使用用户的默认数据库。
也可以使用 -d 显式指定数据库名称。
schema
表或视图的所有者的名称。 如果执行该操作的用户拥有指定的表或视图,则 schema 是可选的。 如果未指定 架构,并且执行该操作的用户不拥有指定的表或视图,SQL Server 将返回一条错误消息,并取消该操作。
table_name
将数据导入 SQL Server (in) 时为目标表名称,将数据从 SQL Server 导出时 (out) 为源表名称。
view_name
将数据复制到 SQL Server (in) 时为目标视图名称,从 SQL Server 中复制数据时 (out) 为源视图名称。 当用作目标(in)时,仅当视图的所有列都引用同一个表,视图才受支持。 当视图用作源时,此限制不适用。out 有关将数据复制到视图的限制的详细信息,请参阅 INSERT。
"query"
一个返回结果集的 Transact-SQL 查询。 如果该查询返回多个结果集,则只将第一个结果集复制到数据文件,而忽略其余的结果集。 将查询用双引号括起来,将查询中嵌入的任何内容用单引号括起来。 从查询中批量复制数据时,还必须指定 queryout。
只要存储过程中引用的所有表在执行 bcp 语句之前都已存在,查询就可以引用存储过程。 例如,如果存储过程生成临时表,则 bcp 语句会失败,因为临时表仅在运行时可用,而不能在语句执行时使用。 在这种情况下,请考虑将存储过程的结果插入表中,然后用于 bcp 将数据从表复制到数据文件中。
在
将数据从文件复制到数据库表或视图中。 指定大容量复制的方向。
out
将数据从数据库表或视图复制到文件。 指定大容量复制的方向。
如果指定了现有文件,则该文件将被覆盖。 当 bcp 实用工具提取数据时,它会将空字符串表示为 null 值,并将 null 字符串表示为空字符串。
data_file
数据文件的完整路径。 将数据批量导入 SQL Server 时,数据文件包含要复制到指定表或视图中的数据。 从 SQL Server 批量导出数据时,数据文件包含从表或视图复制的数据。 路径可以有 1 到 255 个字符。 数据文件最多可包含 2^63 - 1 行。
queryout
从查询中复制数据,且仅在从查询中批量复制数据时才必须指定。
格式
根据指定的选项(-n、-c、-w 或 -N)以及表或视图分隔符创建格式化文件。 批量复制数据时,bcp 命令可以引用格式文件,从而避免以交互方式重新输入格式信息。 该 format 选项需要 -f 该选项;创建 XML 格式化文件也需要该 -x 选项。 有关详细信息,请参阅使用 bcp 创建格式化文件(SQL Server)。 必须指定 nul 作为值 (format nul)。
-q
在 bcp 实用工具与一个 SQL Server 实例之间的连接中执行 SET QUOTED_IDENTIFIER ON 语句。 使用此选项可以指定包含空格或单引号的数据库、所有者、表或视图的名称。 将整个三部分表或视图名称括在引号中("")。
若要指定包含空格或单引号的数据库名称,必须使用 -q 选项。
-q 不适用于传递到 -d 的值。
有关详细信息,请参阅本文中的 备注 部分。
连接和身份验证
-S [server_name[\instance_name]]
指定要连接到的 SQL Server 实例的名称,或者如果使用 -D,则为 DSN。
如果未指定服务器,该bcp实用工具将连接到本地计算机上SQL Server的默认实例。 当从网络上的远程计算机或本地命名实例运行 bcp 命令时,需要此选项。 若要连接到服务器上的 SQL Server 默认实例,请仅指定 server_name。 若要连接到 SQL Server 的命名实例,请指定 <server_name>\<instance_name>。
-d database_name
指定要连接到的数据库。 默认情况下, bcp 连接到默认数据库。 如果指定了 -d <database_name>,并使用三部分名称(database_name.schema.table,作为传递给 bcp 的第一个参数),就会出错,因为不能重复指定数据库名称。 如果 database_name 以连字符 () 或正斜杠 (-) 开头,则不要在 / 与数据库名称之间添加空格。
-U login_id
指定用于连接到 SQL Server的登录 ID。
-P 密码
指定 登录 ID 的密码。 如果不使用此选项,命令提示符 bcp 会提示输入密码。 如果在命令提示符结束时使用此选项而不使用密码, bcp 请使用默认密码(NULL)。
Important
不要使用空密码。 请使用强密码。
若要屏蔽密码,请不要同时指定 -P 和 -U 选项。 而是,在指定bcp以及-U选项和其他开关后(不要指定-P),按Enter键,系统会提示您输入密码。 这种方法可以确保在输入密码时对其进行隐藏。
如果 password 以连字符 () 或正斜杠 (-) 开头,则不要在 / 与 password 值之间添加空格。
在 Linux 和 macOS 上,当与选项-G一起使用且不包含-U时,-P指定包含 Microsoft Entra 访问令牌(v17.8 及更高版本)的文件。 令牌文件应采用 UTF-16LE(无 BOM)格式。 有关详细信息,请参阅 bcp 中使用 Microsoft Entra ID 进行身份验证。
-G
适用于:Azure SQL 数据库、Azure SQL 托管实例、Microsoft Fabric 中的 SQL 数据库、Azure Synapse Analytics 和 SQL Server 2022(16.x)及更高版本。
客户端使用此开关来指定用户使用 Microsoft Entra ID 进行身份验证。 该 -G 开关需要 bcp 版本 14.0.3008.27 或更高版本。 若要确定你的版本,请执行 bcp -v。 欲了解更多信息,请参阅将 Microsoft Entra 身份验证与 SQL 数据库或 Azure Synapse Analytics 配合使用或Microsoft Fabric 的 SQL 数据库中的身份验证。
有关 bcp 中 Microsoft Entra 身份验证的详细信息,请参阅 在 bcp 中使用 Microsoft Entra ID 进行身份验证。
-D
使传递给 bcp -S 选项的值被解释为数据源名称 (DSN)。
-D 可以在命令行上的任意位置显示;相对于 -S 排序无关紧要。
DSN 可用于:
- 嵌入驱动程序选项以简化命令行。
- 强制实施无法从命令行访问的驱动程序选项,例如
MultiSubnetFailover。 - 帮助防止敏感凭据作为命令行参数被发现。
有关详细信息,请参阅 sqlcmd 和 bcp 中的 DSN 支持。
-K 应用意图
连接到服务器时声明应用程序工作负荷类型。 唯一可能的值是 ReadOnly。 如果未指定 -K,该 bcp 实用工具不支持连接到 AlwaysOn 可用性组中的辅助副本。 有关详细信息,请参阅卸载对 Always On 可用性组的次要副本的只读工作负荷。
-l login_timeout
指定登录超时。
-l 选项指定在尝试连接到服务器时登录 SQL Server 的超时时间(以秒为单位)。 默认登录超时值为 15 秒。 登录超时必须是介于 0 和 65534 之间的数字。 如果提供的值不是数字值或不属于该范围, bcp 则生成一条错误消息。 值 0 指定无限超时。
-H 证书中的主机名
指定验证服务器证书时要使用的主机名。 当用于连接的服务器名称与证书使用者名称不匹配时,请使用此选项。
-J server_certificate
指定包含该连接所信任的服务器证书的 PEM 文件路径。
-T
指定 bcp 实用工具使用集成安全性通过受信任连接连接到 SQL Server。 网络用户的安全凭据 login_id 和 password 并非必需。 如果未指定 -T,那么需要指定 -U 和 -P 才能成功连接。
Important
仅在使用 Windows 集成的受信任连接连接到 SQL Server 时使用 -T 。 连接到 Azure SQL 数据库或 Azure Synapse Analytics 时, -T 不支持 (Windows 集成身份验证)。 对于针对 Azure 服务或 SQL Server 2022(16.x)及更高版本的 Microsoft Entra 认证,请使用 -G(请参阅 bcp 中的 Microsoft Entra ID 身份验证)。
-Y[s|m|o]
适用于:bcp版本 18 及更高版本,随 SQL Server 2025 (17.x) 一起提供。
指定连接是否通过网络使用 TLS 加密。
-Y 可以是 o(对于 Optional)、m(对于 Mandatory,默认),或 s(对于 Strict)。 如果未包含 -Y,则 -Ym (for Mandatory)是默认值。
-u
适用于:bcp版本 18 及更高版本,随 SQL Server 2025 (17.x) 一起提供。
信任服务器证书。 与连接的加密选项一起使用时,请使用自签名服务器证书启用加密。
数据表示形式
-c
使用字符数据类型执行该操作。 此选项不会提示输入每个字段。 它使用 char 作为存储类型,而不使用前缀,并使用 \t (制表符)作为字段分隔符和 \r\n (换行符)作为行终止符。
-c 与 -w 不兼容。
有关详细信息,请参阅使用字符格式导入或导出数据 (SQL Server)。
有关最佳做法,请参阅 字符模式和本机模式最佳做法。
-C { ACP | OEM | RAW | code_page }
仅适用于:Windows。 Linux 和 macOS 不支持。
指定该数据文件中数据的代码页。 仅当数据包含具有字符值大于 127 或小于 32 的char、varchar或text列时,code_page才相关。
为格式化文件中的每一列指定排序规则名称,除非希望 65001 选项优先于排序规则或代码页规范。
| 代码页值 | Description |
|---|---|
ACP |
ANSI/Microsoft Windows (ISO 1252)。 |
OEM |
客户端使用的默认代码页。 如果未指定 -C,则此代码页是默认值。 |
RAW |
不进行代码页间的转换。 此选项最快,因为不会发生转换。 |
<code_page> |
特定代码页码,例如 850。 SQL Server 2016(13.x)之前的版本不支持代码页 65001(UTF-8 编码)。 版本 13 和后续版本可将 UTF-8 编码导入以前版本的 SQL Server。 |
-n
使用数据的本机(数据库)数据类型执行大容量复制操作。 此选项不会提示输入每个字段。 它使用原生值。
有关详细信息,请参阅使用本机格式导入或导出数据 (SQL Server)。
有关最佳做法,请参阅 字符模式和本机模式最佳做法。
-N
仅适用于:Windows。 Linux 和 macOS 不支持。
执行大容量复制操作时,对于非字符数据使用本地(数据库)数据类型,对于字符数据使用Unicode字符。 此选项是 -w 选项的一个替代选项,并具有更高的性能。此选项主要用于通过数据文件将数据从一个 SQL Server 实例传送到另一个实例。 此选项不提示输入每个字段。 如果要传送包含 ANSI 扩展字符的数据,并希望利用本机模式的性能优势,则可使用此选项。
有关详细信息,请参阅使用 Unicode 本机格式导入或导出数据 (SQL Server)。
如果使用 bcp 和 -N 将数据先导出再导入到同一表架构中,而其中包含固定长度的非 Unicode 字符列(例如 char(10)),则可能会看到截断警告。
可以忽略警告。 解决此警告的一个方法是使用 -n 来替代 -N。
-w
使用 Unicode 字符执行大容量复制操作。 此选项不会提示输入每个字段。 它使用 nchar 作为存储类型,无前缀, \t (制表符)作为字段分隔符,( \n 换行符)作为行终止符。
-w 与 -c 不兼容。
有关详细信息,请参阅使用 Unicode 字符格式导入或导出数据(SQL Server)。
-z
仅适用于: bcp (ODBC)、Linux 和 macOS。 Windows 系统不被支持。
在 bcp 实用工具中启用对 vector 数据类型的支持。 此功能当前默认处于禁用状态。 禁用后,矢量数据将导入或导出为 JSON 浮点数组字符串。 启用后,在连接到 SQL Server 2025(17.x)及更高版本时,矢量数据将以原生矢量二进制文件格式进行导入或导出。
使用-z0支持float32矢量,使用-z1支持float16矢量。 目前,ODBC 不支持 -z1。
格式化文件
-f format_file
指定格式化文件的完整路径。 此选项的含义取决于使用它的环境,具体如下:
如果使用
-fformat此选项,则会为指定的表或视图创建指定的format_file。 若要创建 XML 格式化文件,请同时指定-x选项。 有关详细信息,请参阅使用 bcp 创建格式化文件(SQL Server)。如果使用
-fin或out选项,则需要现有的格式化文件。注释
使用带
in或out选项的格式化文件是可选的。 如果未指定-f选项,并且未指定-n、-c、-w或-N,则命令提示符将提示设置格式信息,并允许您将响应保存在格式文件中。 默认文件名为bcp.fmt.
如果 format_file 以连字符 () 或正斜杠 (-) 开头,则不要在 / 与 format_file 值之间包含空格。
-x
仅适用于:Windows。 Linux 和 macOS 不支持。
将此选项与format选项及-fformat_file一起使用。 它生成基于 XML 的格式化文件,而不是默认的非 XML 格式化文件。 导入或导出数据时,此选项 -x 不起作用。 如果不与 format 和 -f format_file 一起使用,则将生成错误。
批处理和性能
-a packet_size
指定客户端从服务器发送和接收的每个网络数据包的字节数。 使用 SQL Server Management Studio 或 sp_configure 系统存储过程设置此服务器配置选项。 但是,可以使用此选项单独替代服务器配置选项。
packet_size 可以介于 4,096 字节到 65,535 字节之间。 默认值为 4096。
增加数据包大小可以提高大容量复制操作的性能。 如果请求更大的数据包,但服务器无法授予它,则使用默认值。 实用工具生成的性能统计信息 bcp 显示使用的数据包大小。
-b batch_size
指定每批导入数据的行数。 每个批次均作为一个单独的事务进行导入并记录,在提交之前会导入整批。 默认情况下, bcp 将数据文件中的所有行作为一个批处理导入。 若要将行分为多个批次进行操作,请指定小于数据文件中的行数的 batch_size 。 如果任何批次的事务失败,则将只回滚当前批次中的插入。 已由已提交的事务导入的批次不会受到后续失败的影响。
-b 和 -h "ROWS_PER_BATCH=<bb>" 提示是互斥的。 当你希望 bcp 显式控制批处理时,请使用 -b;或者在将数据作为单个事务发送时,使用 ROWS_PER_BATCH 来提示服务器优化器进行优化。
-h "hints [, ... n]"
仅适用于:Windows。 Linux 和 macOS 不支持。
指定在将数据批量导入表或视图时要使用的提示。
排序 (列 [升序 | 降序] [, ……n])
数据文件中的数据排序次序。 如果导入的数据根据表上的聚集索引(如果有)排序,则大容量导入性能会提高。 如果数据文件按不同的顺序排序,即与聚集索引键的顺序不同,或者表中没有聚集索引,则忽略
ORDER子句。 你提供的列名必须是目标表中的有效列名。 默认情况下,bcp假定数据文件未排序。 对于经过优化的批量导入, SQL Server 还将验证导入的数据是否已排序。ROWS_PER_BATCH = bb
每批数据的行数(即 bb)。 未指定
-b时使用,导致整个数据文件作为单个事务发送到服务器。 服务器根据bb值优化批量加载。 默认情况下,ROWS_PER_BATCH未知。KILOBYTES_PER_BATCH = cc
每批数据的近似千字节数(即 cc)。 默认情况下,
KILOBYTES_PER_BATCH未知。TABLOCK
指定在大容量加载操作期间获取大容量更新表级别的锁;否则,获取行级别的锁。 由于在大容量复制操作期间拥有锁可以减少表中的锁争夺,因此此提示可显著提高性能。 如果表没有索引且
TABLOCK已指定,则可以同时从多个客户端加载表。 默认情况下,表选项table lock on bulkload确定锁定行为。 有关详细信息,请参阅 sp_tableoption。注释
如果目标表是聚集列存储索引,则不需要使用
TABLOCK提示进行加载,因为每个并发线程在索引中各自分配一个独立的行组,将数据加载到该行组中。 有关详细信息,请参阅 列存储索引:概述。CHECK_CONSTRAINTS
指定在批量导入操作期间,必须检查所有对目标表或视图的约束。 没有
CHECK_CONSTRAINTS提示,任何CHECK约束和FOREIGN KEY约束将被忽略,并且在操作后,表上的约束将被标记为不受信任。注释
UNIQUE、PRIMARY KEY和NOT NULL约束始终被强制执行。在某个时间点,您需要检查表格的所有限制。 如果在批量导入操作之前表没有空,则重新验证约束的成本可能会超过对增量数据应用
CHECK约束的成本。 因此,通常可以在增量批量导入期间启用约束检查。当输入数据包含违反约束的行时,您可能希望禁用约束(默认行为)。 通过禁用
CHECK约束,可以导入数据,然后使用 Transact-SQL 语句删除无效的数据。注释
-m“max_errors” 开关不适用于约束检查。FIRE_TRIGGERS
使用 in 参数指定此选项时,在大容量复制操作期间,将执行在目标表上定义的任何插入触发器。 如果未指定
FIRE_TRIGGERS,则不会运行插入触发器。 对于FIRE_TRIGGERS、out和queryout参数,将忽略format。
-m 最大错误数
指定在取消操作之前 bcp 可能发生的最大语法错误数。 语法错误是指将数据转换为目标数据类型时的错误。
max_errors总数排除服务器只能检测的任何错误,例如约束冲突。
忽略实用工具无法复制的行 bcp ,并将其计为一个错误。 如果未包含此选项,则默认值为 10。
注释
-m 选项在转换money或bigint数据类型时不适用。
-F 第一行
指定要从表中导出或从数据文件导入的第一行的编号。 此参数需要大于 (>) 0 但小于 (<) 或等于总行数的值。 如果未指定此参数,则默认值为文件的第一行。
first_row 可以是一个最大为 2^63-1 的正整数值。
-F
first_row 使用基于 1 的编号。
-L 最后一行
指定要从表中导出或从数据文件中导入的最后一行的编号。 此参数需要大于 (>) 0 但小于 (<) 的值或等于最后一行的数目。 如果未指定此参数,则默认值为文件的最后一行。
last_row 可以是一个最大为 2^63-1 的正整数值。
-r row_term
指定行终止符。 默认值为 \n(换行符)。 使用此参数可替代默认行终止符。 有关详细信息,请参阅“指定字段和行终止符”(SQL Server)。
如果在 bcp 命令中以十六进制表示指定行终止符,则该值会在 0x00 处被截断。 例如,如果指定 0x410041,则使用 0x41。
如果 row_term 以连字符 () 或正斜杠 (-) 开头,则不要在 / 与 row_term 值之间包含空格。
-t field_term
指定字段终止符。 默认为 \t(制表符)。 使用此参数可以替代默认字段终止符。 有关详细信息,请参阅“指定字段和行终止符”(SQL Server)。
如果在 bcp 命令中以十六进制表示法指定字段终止符,则该值将在 0x00 处被截断。 例如,如果指定 0x410041,则使用 0x41。
如果 field_term 以连字符 () 或正斜杠 (-) 开头,则不要在 / 与 field_term 值之间包含空格。
值处理
-k
指定空列在操作期间保留 null 值,而不是插入列的任何默认值。 有关详细信息,请参阅在批量导入期间保留 Null 或使用默认值 (SQL Server)。
-E
指定该操作使用导入数据文件中的标识值作为标识列的值。 如果未指定 -E,SQL Server 将忽略要导入的数据文件中此列的标识值,并根据表创建期间指定的种子值和增量值自动分配唯一值。 有关详细信息,请参阅 DBCC CHECKIDENT。
如果数据文件不包含表或视图中标识列的值,请使用格式化文件指定导入数据时应跳过表或视图中的标识列。 SQL Server 自动为列分配唯一值。
-E 选项有一个特殊的权限要求。 有关详细信息,请参阅本文后面的“备注”。
文件 I/O 和日志记录
-i 输入文件
仅适用于:Windows。 Linux 和 macOS 不支持。
指定响应文件的名称。 当你使用交互模式(-n、-c-w或未指定)-N执行大容量复制操作时,该文件包含对每个数据字段的命令提示符问题的响应。
如果 input_file 以连字符 () 或正斜杠 (-) 开头,则不要在 / 与 input_file 值之间包含空格。
-o 输出文件
仅适用于:Windows。 Linux 和 macOS 不支持。
指定文件名称,该文件用于接收从命令提示符重定向来的输出。
如果 output_file 以连字符 () 或正斜杠 (-) 开头,则不要在 / 与 output_file 值之间包含空格。
-e err_file
指定错误文件的完整路径,该文件用于存储 bcp 实用工具无法从文件传输到数据库的任何行数据。 命令中的错误消息 bcp 将转到用户的工作站。 如果不使用此选项,则不会创建错误文件。
如果 err_file 以连字符 () 或正斜杠 (-) 开头,则不要在 / 与 err_file 值之间包含空格。
兼容性和版本控制
-V { 80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 | 170 }
仅适用于:Windows。 Linux 和 macOS 不支持。
使用 SQL Server早期版本中的数据类型执行大容量复制操作。 此选项并不提示输入每个字段,它使用默认值。
-
80= SQL Server 2000 (8.x) -
90= SQL Server 2005 (9.x) -
100= SQL Server 2008 (10.0.x) 和 SQL Server 2008 R2 (10.50.x) -
110= SQL Server 2012 (11.x) -
120= SQL Server 2014 (12.x) -
130= SQL Server 2016 (13.x) -
140= SQL Server 2017 (14.x) -
150= SQL Server 2019 (15.x) -
160= SQL Server 2022 (16.x) -
170= SQL Server 2025 (17.x)
例如,若要为 SQL Server 2000 (8.x) 不支持的类型生成数据,但在更高版本中引入,请使用此选项 -V80 。
有关详细信息,请参阅导入来自早期版本的 SQL Server 的本机格式数据和字符格式数据。
其他选项
-R
指定bcp该实用工具使用为客户端计算机的区域设置定义的区域格式将货币、日期和时间数据批量复制到SQL Server。 默认情况下, bcp 忽略区域设置。
-v
显示 bcp 实用工具的版本号和版权信息。
注解
- 该
bcp实用工具仅显示错误消息的前 512 个字节。 - 该
bcp实用工具支持与所有受支持的 SQL Server 版本兼容的本机数据文件。 -
bcp目前在 Microsoft Fabric 的 Warehouse 中处于预览状态。 -
bcp无法在 Microsoft Fabric 中导入 SQL 分析终结点中的数据。
权限
bcp out 操作需要对源表具有 SELECT 权限。
对目标表执行 bcp in 操作需要最低的 SELECT 和 INSERT 权限。 此外,如果满足以下任一条件,则需要 ALTER TABLE 权限:
存在约束,但未指定
CHECK_CONSTRAINTS提示。禁用约束是默认行为。 要显式启用约束,请将
-h选项与CHECK_CONSTRAINTS提示一起使用。存在触发器,但未指定
FIRE_TRIGGERS提示。默认情况下,不会激发触发器。 要显式触发触发器,请使用
-h选项和FIRE_TRIGGERS提示。可以使用
-E选项从数据文件导入标识值。
相关内容
- 准备用于批量导出或导入的数据
- BULK INSERT (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SET QUOTED_IDENTIFIER (Transact-SQL)
- sp_configure(Transact-SQL)
- sp_tableoption(Transact-SQL)
- 格式化文件以导入或导出数据(SQL Server)
获取帮助
- 关于 SQL 的想法:您对改进 SQL Server 有建议吗?
- Microsoft Q&A (SQL Server)
- DBA Stack Exchange (标签 sql-server):提出 SQL Server 问题
- Stack Overflow (标签 sql-server):SQL 相关开发问题的答案
- Microsoft SQL Server许可条款和信息
- 企业用户支持选项
- 更多 SQL Server 帮助和反馈
参与编辑 SQL 文档
你是否知道你可以自行编辑 SQL 内容? 你如果这样做,不仅可以帮助改进我们的文档,还可以获得页面贡献者的殊荣。
有关详细信息,请参阅 Edit Microsoft Learn 文档。