适用于:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
分析平台系统(PDW)
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"hint [ , ...n ] " ]
[ -i input_file ]
[ -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 ]
命令行选项
下表列出了 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 | 是的 | 是的 |
| -T | 是的 | 是的 |
| -Y[s| m| o] | 是 1 | 是 1 |
| 数据表示形式 | ||
| -c | 是的 | 是的 |
| -C { ACP |OEM |RAW | code_page } | 是的 | 否 |
| -n | 是的 | 是的 |
| -N | 是的 | 否 |
| -w | 是的 | 是的 |
| -z | 否 | 是 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 将数据从表复制到数据文件中。
在
将数据从文件复制到数据库表或视图中。 指定大容量复制的方向。
出局
将数据从数据库表或视图复制到文件。 指定大容量复制的方向。
如果指定了现有文件,则该文件将被覆盖。 当 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
在 SET QUOTED_IDENTIFIER ON 实用工具与 SQL Server 实例之间的连接中执行 语句。 使用此选项可以指定包含空格或单引号的数据库、所有者、表或视图的名称。 将整个三部分表或视图名称括在引号中("")。
若要指定包含空格或单引号的数据库名称,必须使用 -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 指定无限超时。
-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 实用工具中启用矢量数据类型支持。 此功能当前默认处于禁用状态。 禁用后,矢量数据将导入或导出为 JSON 浮点数组字符串。 启用后,在连接到 SQL Server 2025(17.x)及更高版本时,矢量数据将以原生矢量二进制文件格式进行导入或导出。
格式化文件
-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>" 提示是互斥的。 使用-b以显式控制bcp的分批处理,或者在将数据作为单个事务发送时使用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 命令中以十六进制表示法指定行终止符,则该值将在 处截断。 例如,如果指定 0x410041,则使用 0x41。
如果 row_term 以连字符 () 或正斜杠 (-) 开头,则不要在 / 与 row_term 值之间包含空格。
-t field_term
指定字段终止符。 默认为 \t(制表符)。 使用此参数可以替代默认字段终止符。 有关详细信息,请参阅“指定字段和行终止符”(SQL Server)。
如果在 bcp 命令中以十六进制表示法指定字段终止符,则该值将在 处截断。 例如,如果指定 0x410041,则使用 0x41。
如果 field_term 以连字符 () 或正斜杠 (-) 开头,则不要在 / 与 field_term 值之间包含空格。
值处理
-k
指定空列在操作期间保留 null 值,而不是插入列的任何默认值。 有关详细信息,请参阅在批量导入期间保留 Null 或使用默认值 (SQL Server)。
-E
指定该操作在导入的数据文件中为标识列使用标识值。 如果未指定 -E,SQL Server 将忽略要导入的数据文件中此列的标识值,并根据表创建期间指定的种子值和增量值自动分配唯一值。 有关详细信息,请参阅 DBCC CHECKIDENT。
如果数据文件不包含表或视图中标识列的值,请使用格式化文件指定导入数据时应跳过表或视图中的标识列。 SQL Server 自动为列分配唯一值。
-E 选项有一个特殊的权限要求。 有关详细信息,请参阅本文后面的“备注”。
文件 I/O 和日志记录
-i input_file
仅适用于: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 实用工具支持与所有受支持的 SQL Server 版本兼容的本机数据文件。
bcp 实用工具仅显示错误消息的前 512 个字节。
权限
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 文档。