bcp 实用工具

bcp 实用工具可以在 Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据。 使用 bcp 实用工具可以将大量新行导入 SQL Server 表,或将表数据导出到数据文件。 除非与 queryout 选项一起使用,否则使用该实用工具不需要了解 Transact-SQL 知识。 若要将数据导入表中,必须使用为该表创建的格式文件,或者必须了解表的结构以及对于该表中的列有效的数据类型。

主题链接图标 有关用于 bcp 语法的语法约定,请参阅 Transact-SQL 语法约定 (Transact-SQL)

注意注意

如果使用 bcp 备份数据,请创建一个格式化文件来记录数据格式。 bcp 数据文件不包括任何架构或格式信息,因此如果已删除表或视图并且不具备格式化文件,则可能无法导入数据。

语法

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]
   [-e err_file]
   [-E]
   [-f format_file]
   [-F first_row]
   [-h"hint [,...n]"] 
   [-i input_file]
   [-k]
   [-K application_intent]
   [-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]
   [-v]
   [-V (80 | 90 | 100 )]
   [-w]
   [-x]
   /?

参数

  • data_file
    数据文件的完整路径。 将数据大容量导入 SQL Server 时,数据文件将包含要复制到指定的表或视图中的数据。 从 SQL Server 中大容量导出数据时,数据文件将包含从表或视图中复制的数据。 路径可以有 1 到 255 个字符。 数据文件最多可包含 263 - 1 行。

  • database_name
    指定的表或视图所在数据库的名称。 如果未指定,则使用用户的默认数据库。

    也可以使用 d- 显式指定数据库名称。

  • in data_file | outdata_file | queryoutdata_file | format nul
    指定大容量复制的方向,具体如下:

    • in 从文件复制到数据库表或视图。

    • out 从数据库表或视图复制到文件。 如果指定了现有文件,则该文件将被覆盖。 提取数据时,请注意 bcp 实用工具将空字符串表示为 null,而将 null 字符串表示为空字符串。

    • queryout 从查询中复制,仅当从查询大容量复制数据时才必须指定此选项。

    • format 根据指定的选项(-n-c-w-N)以及表或视图的分隔符创建格式化文件。 大容量复制数据时,bcp 命令可以引用一个格式化文件,从而避免以交互方式重复输入格式信息。 format 选项要求指定 -f 选项;创建 XML 格式化文件时还需要指定 -x 选项。 有关详细信息,请参阅创建格式化文件 (SQL Server)。 您必须指定 nul 作为值 (format nul)。

  • owner
    表或视图的所有者的名称。 如果执行该操作的用户拥有指定的表或视图,则 owner 是可选的。 如果未指定 owner,并且执行该操作的用户不是指定的表或视图的所有者,则 SQL Server 将返回错误消息,而且该操作将取消。

  • " query "
    一个返回结果集的 Transact-SQL 查询。 如果该查询返回多个结果集,则只将第一个结果集复制到数据文件,而忽略其余的结果集。 将查询用双引号括起来,将查询中嵌入的任何内容用单引号括起来。 从查询大容量复制数据时,也必须指定 queryout

    只要在执行 bcp 语句之前存储过程内引用的所有表均存在,查询就可以引用该存储过程。 例如,如果存储过程生成一个临时表,则 bcp 语句便会失败,因为该临时表只在运行时可用,而在语句执行时不可用。 在这种情况下,应考虑将存储过程的结果插入表中,然后使用 bcp 将数据从表复制到数据文件中。

  • table_name
    将数据导入 SQL Server (in) 时为目标表名称,将数据从 SQL Server (out) 导出时为源表名称。

  • view_name
    将数据复制到 SQL Server (in) 时为目标视图名称,从 SQL Server (out) 中复制数据时为源视图名称。 只有其中所有列都引用同一个表的视图才能用作目标视图。 有关将数据复制到视图的限制的详细信息,请参阅 INSERT (Transact-SQL)

  • -a packet_size
    指定服务器发出或接收的每个网络数据包的字节数。 可以使用 SQL Server Management Studio(或 sp_configure 系统存储过程)来设置服务器配置选项。 但是,可以使用此选项逐个替代服务器配置选项。 packet_size 的取值范围为 4096 到 65535 字节,默认为 4096 字节。

    增大数据包可以提高大容量复制操作的性能。 如果无法得到请求的较大数据包,则使用默认值。 bcp 实用工具生成的性能统计信息可以显示所用的数据包大小。

  • -b batch_size
    指定每批导入数据的行数。 每个批次均作为一个单独的事务进行导入并记录,在提交之前会导入整批。 默认情况下,数据文件中的所有行均作为一个批次导入。 若要将行分为多个批次进行操作,请指定小于数据文件中的行数的 batch_size。 如果任何批次的事务失败,则将只回滚当前批次中的插入。 已经由已提交事务导入的批次不会受到将来失败的影响。

    不要将此选项与 -h"ROWS_PER_BATCH = bb" 选项一起使用。

  • -c
    使用字符数据类型执行该操作。 此选项不提示输入每个字段;它使用 char 作为存储类型,不带前缀;使用 \t(制表符)作为字段分隔符,使用 \r\n(换行符)作为行终止符。 -c 与 -w 不兼容。

    有关详细信息,请参阅使用字符格式导入或导出数据 (SQL Server)

  • -C { ACP | OEM | RAW | code_page }
    指定该数据文件中数据的代码页。 仅当数据含有字符值大于 127 或小于 32 的 char、varchar 或 text 列时,code_page 才适用。

    注意注意

    建议在格式化文件中为每个列指定一个排序规则名称。

    代码页值

    说明

    ACP

    ANSI/Microsoft Windows (ISO 1252)。

    OEM

    客户端使用的默认代码页。 未指定 -C 时使用的默认代码页。

    RAW

    不进行代码页间的转换。 因为不进行转换,所以这是最快的选项。

    code_page

    特定的代码页编号,例如 850。

    重要说明重要提示

    SQL Server 不支持代码页 65001(UTF-8 编码)。

  • -d database_name
    指定要连接到的数据库。 默认情况下,bcp.exe 连接到用户的默认数据库。 如果指定了 -d database_name 和包含三部分的名称(database_name.schema.table,作为第一个参数传递给 bcp.exe),则将发生错误,因为您不能两次指定数据库名称。如果 database_name 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -d 和数据库名称之间添加空格。

  • -e err_file
    指定错误文件的完整路径,此文件用于存储 bcp 实用工具无法从文件传输到数据库的所有行。 bcp 命令产生的错误消息将被发送到用户的工作站。 如果不使用此选项,则不会创建错误文件。

    如果 err_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -e 与 err_file 值之间包含空格。

  • -E
    指定导入数据文件中的标识值用于标识列。 如果未指定 -E,则将忽略所导入数据文件中此列的标识值,而且 SQL Server 将根据创建表期间指定的种子值和增量值自动分配唯一值。

    如果数据文件不包含表或视图中的标识列的值,则可使用格式化文件指定,在导入数据时应跳过表或视图中的标识列;SQL Server 将自动为该列分配唯一值。 有关详细信息,请参阅 DBCC CHECKIDENT (Transact-SQL)

    -E 选项有一个特殊的权限要求。 有关详细信息,请参阅本主题后面的“备注”。

  • -f format_file
    指定格式化文件的完整路径。 此选项的含义取决于使用它的环境,具体如下:

    • 如果 -fformat 选项一起使用,则将为指定的表或视图创建指定的 format_file。 若要创建 XML 格式化文件,请同时指定 -x 选项。 有关详细信息,请参阅创建格式化文件 (SQL Server)

    • 如果与 inout 选项一起使用,则 -f 需要一个现有的格式化文件。

      注意注意

      inout 选项一起使用时,格式化文件是可选的。 如果没有 -f 选项,则在未指定 -n-c-w-N 时,该命令将提示输入格式信息,并允许您将响应保存在格式化文件(默认文件名为 Bcp.fmt)中。

    如果 format_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -f 与 format_file 值之间包含空格。

  • -F first_row
    指定要从表中导出或从数据文件导入的第一行的编号。 此参数的值应大于 (>) 0,小于 (<) 或等于 (=) 总行数。 如果未指定此参数,则默认为文件的第一行。

    first_row 可以是一个最大为 2^63-1 的正整数值。 -F first_row 从 1 开始。

  • -h" hint[ ,...n] "
    指定向表或视图中大容量导入数据时要用到的提示。

    • ORDER**(column[ASC | DESC] [,...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 bulk load 确定。

    • CHECK_CONSTRAINTS
      指定在大容量导入操作期间,必须检查针对目标表或视图的所有约束。 如果没有 CHECK_CONSTRAINTS 提示,则忽略所有 CHECK 和 FOREIGN KEY 约束;操作完成后,对表的约束将被标记为不可信。

      注意注意

      始终强制使用 UNIQUE、PRIMARY KEY 和 NOT NULL 约束。

      在某些时候,需要检查整个表的约束。 如果在大容量导入操作之前表为非空状态,则重新验证约束的开销可能超过将 CHECK 约束应用于增量数据的开销。 因此,建议您在正常情况下,在进行增量式大容量导入时启用约束检查。

      当输入数据包含违反约束的行时,您可能希望禁用约束(默认行为)。 如果禁用 CHECK 约束,您可以导入数据,然后使用 Transact-SQL 语句删除无效数据。

      注意注意

      bcp 现在会强制执行数据验证和数据检查,这样,在对数据文件中的无效数据执行脚本时,可能会导致脚本失败。

      注意注意

      -m max_errors 开关不适用于约束检查。

    • FIRE_TRIGGERS
      in 参数一同指定,在目标表中定义的任何插入触发器都将在大容量复制操作期间运行。 如果未指定 FIRE_TRIGGERS,将不运行任何插入触发器。 对于 outqueryoutformat 参数,将忽略 FIRE_TRIGGERS。

  • -i input_file
    指定响应文件的名称,其中包含在交互模式(未指定 -n-c-w-N)下执行大容量复制时,对该命令要求输入每个数据字段的提示信息所作出的响应。

    如果 input_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -i 与 input_file 值之间包含空格。

  • -k
    指定在操作过程中空列应该保留 null 值,而不是所插入列的任何默认值。 有关详细信息,请参阅在大容量导入期间保留 Null 或使用默认值 (SQL Server)

  • -K application_intent
    连接到服务器时声明应用程序工作负荷类型。 唯一可能的值是 ReadOnly。 如果未指定 -K,bcp 实用工具将不支持连接到 AlwaysOn 可用性组中的辅助副本。 有关详细信息,请参阅活动辅助副本:可读辅助副本(AlwaysOn 可用性组)

  • -L last_row
    指定要从表中导出或从数据文件中导入的最后一行的编号。 此参数的值应大于 (>) 0,小于 (<) 或等于 (=) 最后一行的编号。 如果未指定此参数,则默认为文件的最后一行。

    last_row 可以是一个最大为 2^63-1 的正整数值。

  • -m max_errors
    指定取消 bcp 操作之前可能出现的语法错误的最大数目。 语法错误是指将数据转换为目标数据类型时的错误。 max_errors 总数不包括只能在服务器中检测到的错误,如违反约束。

    无法由 bcp 实用工具复制的行将被忽略,并计为一个错误。 如果未包括此选项,则默认值为 10。

    注意注意

    -m 选项也不适用于转换 money 或 bigint 数据类型。

  • -n
    使用数据的本机(数据库)数据类型执行大容量复制操作。 此选项不提示输入每个字段,它将使用本机值。

    有关详细信息,请参阅使用本机格式导入或导出数据 (SQL Server)

  • -N
    执行大容量复制操作时,对非字符数据使用本机(数据库)数据类型的数据,对字符数据使用 Unicode 字符。 此选项是 -w 选项的一个替代选项,并具有更高的性能。此选项主要用于通过数据文件将数据从一个 SQL Server 实例传送到另一个实例。 此选项不提示输入每个字段。 如果要传送包含 ANSI 扩展字符的数据,并希望利用本机模式的性能优势,则可使用此选项。

    有关详细信息,请参阅使用 Unicode 本机格式导入或导出数据 (SQL Server)

    如果您通过将 bcp.exe 与 -N 一起使用来导出数据后又将数据导入到同一表架构中,则在存在固定长度的非 Unicode 字符列(例如 char(10))的情况下,系统可能会显示截断警告。

    可忽略该警告。 解决此警告的一个方法是使用 -n 来替代 -N

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

    如果 output_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -o 与 output_file 值之间包含空格。

  • -P password
    指定登录 ID 的密码。 如果未使用此选项,bcp 命令将提示输入密码。 如果在命令提示符的末尾使用此选项,但不提供密码,则 bcp 将使用默认密码 (NULL)。

    安全说明安全说明

    不要使用空密码。请使用强密码。

    若要屏蔽密码,请不要同时指定 -P-U 选项。 而应在指定 bcp 以及 -U 选项和其他开关(不指定 -P)之后按 Enter,这时命令会提示输入密码。 这种方法可以确保输入密码时对其屏蔽。

    如果 password 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -P 与 password 值之间添加空格。

  • -q
    bcp 实用工具和 SQL Server 实例之间的连接中,执行 SET QUOTED_IDENTIFIERS ON 语句。 使用此选项可以指定包含空格或单引号的数据库、所有者、表或视图的名称。 将由三部分组成的整个表名或视图名用英文双引号 ("") 引起来。

    若要指定包含空格或单引号的数据库名称,必须使用 –q 选项。

    -q 不适用于传递到 -d 的值。

    有关详细信息,请参阅本主题后面的“备注”。

  • -r row_term
    指定行终止符。 默认的行终止符是 \n(换行符)。 使用此参数可替代默认行终止符。 有关详细信息,请参阅指定字段终止符和行终止符 (SQL Server)

    如果您在 bcp.exe 命令中以十六进制表示法指定行终止符,则该值将在 0x00 处截断。 例如,如果您指定 0x410041,则将使用 0x41。

    如果 row_term 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -r 与 row_term 值之间包含空格。

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

  • -S server_name[ **\instance_name]
    指定要连接的 SQL Server 实例。 如果未指定服务器,则 bcp 实用工具将连接到本地计算机上的默认 SQL Server 实例。 如果从网络或本地命名实例上的远程计算机中运行 bcp 命令,则必须使用此选项。 若要连接到服务器上的 SQL Server 默认实例,请仅指定 server_name。 若要连接到 SQL Server 的命名实例,请指定 server_name
    \**instance_name。

  • -t field_term
    指定字段终止符。 默认的字段终止符是 \t(制表符)。 使用此参数可以替代默认字段终止符。 有关详细信息,请参阅指定字段终止符和行终止符 (SQL Server)

    如果您在 bcp.exe 命令中以十六进制表示法指定字段终止符,则该值将在 0x00 处截断。 例如,如果您指定 0x410041,则将使用 0x41。

    如果 field_term 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -t 与 field_term 值之间包含空格。

  • -T
    指定 bcp 实用工具通过使用集成安全性的可信连接连接到 SQL Server。 不需要网络用户的安全凭据、login_id 和 password。 如果未指定 –T,则需要指定 –U–P 才能成功登录。

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

    安全说明安全说明

    如果 bcp 实用工具通过使用集成安全性的可信连接连接到 SQL Server,则使用 -T 选项(可信连接),而不要使用 user name 和 password 的组合。

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

  • -V (80 | 90 | 100)
    使用 SQL Server 早期版本中的数据类型执行大容量复制操作。 此选项并不提示输入每个字段,它将使用默认值。

    80 = SQL Server 2000

    90 = SQL Server 2005

    100 = SQL Server 2008 和 SQL Server 2008 R2

    例如,若要为 SQL Server 2000 不支持、但是在较高版本的 SQL Server 中引入的类型生成数据,请使用 -V80 选项。

    有关详细信息,请参阅导入来自早期版本的 SQL Server 的本机格式数据和字符格式数据

  • -w
    使用 Unicode 字符执行大容量复制操作。 此选项不提示输入每个字段;它使用 nchar 作为存储类型,不带前缀;使用 \t(制表符)作为字段分隔符,使用 \n(换行符)作为行终止符。 -w 与 -c 不兼容。

    有关详细信息,请参阅使用 Unicode 字符格式导入或导出数据 (SQL Server)

  • -x
    format-f format_file 选项一起使用,可以生成基于 XML 的格式化文件,而不是默认的非 XML 格式化文件。 在导入或导出数据时,-x 不起作用。 如果不与 format-f format_file 一起使用,则将生成错误。

注释

当安装 Microsoft SQL Server 2012 工具时,将安装 bcp 11.0 客户端。 如果同时安装了 SQL Server 2012 和早期版本 SQL Server 的工具,您所使用的可能是早期版本的 bcp 客户端,而不是 bcp 11.0 客户端,具体情况取决于 PATH 环境变量的值。 此环境变量定义 Windows 用于搜索可执行文件的目录集。 若要确定当前所使用的版本,请在 Windows 命令提示符下运行 bcp /v 命令。 有关如何在 PATH 环境变量中设置命令路径的信息,请参阅 Windows 帮助。

只有当 SQL Server 工具和 SQL Server Native Client 一起安装后,才支持 XML 格式化文件。

有关在何处查找或如何运行 bcp 实用工具的信息以及有关命令提示实用工具语法约定的信息,请参阅命令提示实用工具参考(数据库引擎)

有关准备用于大容量导入或导出操作的数据的信息,请参阅准备用于大容量导出或导入的数据 (SQL Server)

有关何时在事务日志中记录由大容量导入执行的行插入操作的信息,请参阅在大容量导入中按最小方式记录日志的前提条件

本机数据文件支持

在 SQL Server 2012 中,bcp 实用工具仅支持与 SQL Server 2000、SQL Server 2005、SQL Server 2008 和 SQL Server 2008 R2 兼容的本机数据文件。

计算列和 timestamp 列

为计算列或 timestamp 列导入的数据文件中的值将被忽略,SQL Server 将自动分配值。 如果数据文件不包含表中的计算列或 timestamp 列的值,则可使用格式化文件指定应在导入数据时忽略表中的计算列或 timestamp 列;SQL Server 将自动为列分配值。

计算列和 timestamp 列会照常从 SQL Server 大容量复制到数据文件中。

指定包含空格或引号的标识符

SQL Server 标识符可以包含嵌入的空格和引号等字符。 此类标识符必须按以下方式处理:

  • 如果在命令指示符处指定的标识符或文件名包含空格或引号,则需用英文双引号 ("") 将该标识符引起来。

    例如,下面的 bcp out 命令创建了一个名为 Currency Types.dat 的数据文件:

    bcp AdventureWorks2012.Sales.Currency out "Currency Types.dat" -T -c
    
  • 若要指定包含空格或引号的数据库名称,必须使用 -q 选项。

  • 对于包含嵌入空格或引号的所有者、表或视图的名称,可以执行以下任一操作:

    • 指定 -q 选项,或者

    • 将所有者、表或视图的名称括在方括号 ([]) 中,并用引号引起来。

数据验证

bcp 现在会强制执行数据验证和数据检查,这样,在对数据文件中的无效数据执行脚本时,可能会导致脚本失败。 例如,bcp 现在可以验证:

  • float 或 real 数据类型的本机表示形式是否有效。

  • Unicode 数据的字节数是否为偶数。

可以在早期版本的 SQL Server 中大容量导入的无效数据类型现在可能无法加载。在早期版本中,仅当客户端尝试访问无效数据时才出现失败。 在大容量加载后查询数据时,添加的验证可最大限度地减少警告。

大容量导出或导入 SQLXML 文档

若要大容量导出或导入 SQLXML 数据,请在格式化文件中使用下列数据类型之一。

数据类型

效果

SQLCHAR 或 SQLVARYCHAR

在客户端代码页或排序规则隐含的代码页中发送数据。 与在不指定格式化文件的情况下指定 -c 开关具有相同的效果。

SQLNCHAR 或 SQLNVARCHAR

以 Unicode 格式发送数据。 与在不指定格式化文件的情况下指定 -w 开关具有相同的效果。

SQLBINARY 或 SQLVARYBIN

不经任何转换即发送数据。

权限

bcp out 操作要求对源表有 SELECT 权限。

bcp in 操作要求至少对目标表有 SELECT/INSERT 权限。 此外,如果下列任一条件成立,则要求拥有 ALTER TABLE 权限:

  • 存在约束,但没有指定 CHECK_CONSTRAINTS 提示。

    注意注意

    禁用约束是默认行为。 若要显式启用约束,请使用 -h 选项和 CHECK_CONSTRAINTS 提示。

  • 存在触发器,但没有指定 FIRE_TRIGGER 提示。

    注意注意

    默认情况下,不激发触发器。 若要显式激发触发器,请使用 -h 选项和 FIRE_TRIGGERS 提示。

  • 可以使用 -E 选项从数据文件导入标识值。

注意注意

要求对目标表具有 ALTER TABLE 权限是 SQL Server 2005 的新要求。 如果用户帐户不具有对目标表的 ALTER TABLE 权限,这项新要求有可能导致不强制使用触发器和约束检查的 bcp 脚本失败。

字符模式 (-c) 和本机模式 (-n) 最佳做法

本节提供与字符模式 (-c) 和本机模式 (-n) 有关的一些建议。

  • (管理员/用户)应尽可能使用本机格式 (-n) 以避免分隔符问题。 使用本机格式可以使用 SQL Server 进行导出和导入。 如果数据将导入到非 SQL Server 数据库,则使用 -c 或 -w 选项从 SQL Server 导出数据。

  • (管理员)在使用 BCP OUT 时验证数据。 例如,在您使用 BCP OUT、BCP IN,然后又使用 BCP OUT 时,请验证数据正确导出,并且终止符值未用作某个数据值的一部分。 请考虑使用随机的十六进制值覆盖默认的终止符(使用 -t 和 -r 选项),以便避免终止符值和数据值之间的冲突。

  • (用户)使用长且唯一的终止符(任意字节或字符序列)可以最大程度减少与实际字符串值冲突的可能性。 这可以通过使用 -t 和 -r 选项实现。

示例

本部分包含以下示例:

  • A. 将表行复制到数据文件中(使用可信连接)

  • B. 将表行复制到数据文件中(使用混合模式身份验证)

  • C. 将文件中的数据复制到表中

  • D. 将特定的列复制到数据文件中

  • E. 将特定的行复制到数据文件中

  • F. 将查询中的数据复制到数据文件中

  • G. 创建非 XML 格式化文件

  • H. 创建 XML 格式化文件

  • I. 使用格式化文件进行 bcp 大容量导入

A.将表行复制到数据文件中(使用可信连接)

下面的示例阐释了 AdventureWorks2012.Sales.Currency 表中的 out 选项。 此示例创建一个名为 Currency.dat 的数据文件,并使用字符格式将表数据复制到该文件中。 该示例假定您使用 Windows 身份验证,并且与运行 bcp 命令所针对的服务器实例之间具有可信连接。

在命令提示符处输入以下命令:

bcp AdventureWorks2012.Sales.Currency out Currency.dat -T -c

B.将表行复制到数据文件中(使用混合模式身份验证)

下面的示例阐释了 AdventureWorks2012.Sales.Currency 表中的 out 选项。 此示例创建一个名为 Currency.dat 的数据文件,并使用字符格式将表数据复制到该文件中。

该示例假定您使用混合模式身份验证,您必须使用 -U 开关指定登录 ID。 并且,除非您连接到本地计算机上 SQL Server 的默认实例,否则请使用 -S 开关指定系统名称和实例名称(可选)。

bcp AdventureWorks2012.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>

系统将提示您输入密码。

C.将文件中的数据复制到表中

下面的示例使用上一个示例中创建的文件 (Currency.dat) 来阐释 in 选项。 但是,此示例将首先创建一个 AdventureWorks2012 Sales.Currency 表的空副本 Sales.Currency2,数据将被复制到该副本中。 该示例假定您使用 Windows 身份验证,并且与运行 bcp 命令所针对的服务器实例之间具有可信连接。

若要创建空表,可在查询编辑器中输入以下命令:

USE AdventureWorks2012;
GO
SELECT * INTO AdventureWorks2012.Sales.Currency2 
FROM AdventureWorks2012.Sales.Currency WHERE 1=2;

若要将字符数据大容量复制到新表中(即导入数据),可在命令提示符处输入以下命令:

bcp AdventureWorks2012.Sales.Currency2 in Currency.dat -T -c

若要验证命令是否成功,并在查询编辑器中显示表的内容,请输入:

USE AdventureWorks2012;
GO
SELECT * FROM Sales.Currency2

D.将特定的列复制到数据文件中

若要复制特定列,可以使用 queryout 选项。 下面的示例仅将 Sales.Currency 表中的 Name 列复制到数据文件中。 该示例假定您使用 Windows 身份验证,并且与运行 bcp 命令所针对的服务器实例之间具有可信连接。

在 Windows 命令提示符下,输入以下内容:

bcp "SELECT Name FROM AdventureWorks.Sales.Currency" queryout Currency.Name.dat -T -c

E.将特定的行复制到数据文件中

若要复制特定行,可以使用 queryout 选项。 下面的示例仅将名为 Jarrod Rana 的联系人的行从 AdventureWorks2012.Person.Person 表复制到数据文件 (Jarrod Rana.dat)中。该示例假定您使用 Windows 身份验证,并且与运行 bcp 命令所针对的服务器实例之间具有可信连接。

在 Windows 命令提示符下,输入以下内容:

bcp "SELECT * FROM AdventureWorks2012.Person.Person WHERE FirstName='Jarrod' AND LastName='Rana' "  queryout "Jarrod Rana.dat" -T -c

F.将查询中的数据复制到数据文件中

若要将 Transact-SQL 语句的结果集复制到数据文件中,请使用 queryout 选项。 下面的示例将 AdventureWorks2012.Person.Person 表中的姓名复制到 Contacts.txt 数据文件中;这些姓名先按姓排序,再按名排序。 该示例假定您使用 Windows 身份验证,并且与运行 bcp 命令所针对的服务器实例之间具有可信连接。

在 Windows 命令提示符下,输入以下内容:

bcp "SELECT FirstName, LastName FROM AdventureWorks2012.Person.Person ORDER BY LastName, Firstname" queryout Contacts.txt -c -T

G.创建非 XML 格式化文件

下面的示例为 AdventureWorks2012 数据库中的 Sales.Currency 表创建一个非 XML 格式化文件 Currency.fmt。 该示例假定您使用 Windows 身份验证,并且与运行 bcp 命令所针对的服务器实例之间具有可信连接。

在 Windows 命令提示符下,输入以下内容:

bcp AdventureWorks2012.Sales.Currency format nul -T -c  -f Currency.fmt

有关详细信息,请参阅非 XML 格式化文件 (SQL Server)

H.创建 XML 格式化文件

下面的示例为 AdventureWorks2012 数据库中的 Sales.Currency 表创建一个名为 Currency.xml 的 XML 格式化文件。 该示例假定您使用 Windows 身份验证,并且与运行 bcp 命令所针对的服务器实例之间具有可信连接。

在 Windows 命令提示符下,输入以下内容:

bcp AdventureWorks2012.Sales.Currency format nul -T -c -x -f Currency.xml
注意注意

若要使用 -x 开关,则必须使用 bcp 9.0 客户端。 有关如何使用 bcp 9.0 客户端的信息,请参阅“备注”。

有关详细信息,请参阅XML 格式化文件 (SQL Server)

I.使用格式化文件进行 bcp 大容量导入

向 SQL Server 的实例中导入数据时,若要使用以前创建的格式化文件,请同时使用 -f 开关和 in 选项。 例如,以下命令通过使用以前创建的格式化文件 (Currency.xml),将数据文件 Currency.dat 的内容大容量复制到 Sales.Currency 表的副本 (Sales.Currency2) 中。 该示例假定您使用 Windows 身份验证,并且与运行 bcp 命令所针对的服务器实例之间具有可信连接。

在 Windows 命令提示符下,输入以下内容:

bcp AdventureWorks2012.Sales.Currency2 in Currency.dat -T -f Currency.xml
注意注意

如果数据文件字段和表中的列不同(例如,在编号、排序或数据类型方面),则可使用格式化文件。 有关详细信息,请参阅用来导入或导出数据的格式化文件 (SQL Server)

其他示例

下列主题包含使用 bcp 的示例:

请参阅

参考

BULK INSERT (Transact-SQL)

OPENROWSET (Transact-SQL)

SET QUOTED_IDENTIFIER (Transact-SQL)

sp_configure (Transact-SQL)

sp_tableoption (Transact-SQL)

概念

准备用于大容量导出或导入的数据 (SQL Server)

用来导入或导出数据的格式化文件 (SQL Server)