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 | out | queryout | format} data_file
    [-mmax_errors] [-fformat_file] [-x] [-eerr_file]
    [-Ffirst_row] [-Llast_row] [-bbatch_size]
    [-ddatabase_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )] 
    [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term] 
    [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
    [-S [server_name[\instance_name]]] [-Ulogin_id] [-Ppassword]
    [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]

参数

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

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

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

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

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

  • "query"
    一个返回结果集的 Transact-SQL 查询。如果该查询返回多个结果集(如指定 COMPUTE 子句的 SELECT 语句),则只将第一个结果集复制到数据文件,而忽略后续的结果集。请将查询放在英文双引号中,将查询中嵌入的任何内容放在英文单引号中。从查询中大容量复制数据时,还必须指定 queryout

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

  • in | out| queryout | format
    指定大容量复制的方向,具体如下:

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

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

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

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

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

    重要说明重要提示

    对于 format 选项,必须指定 nul 作为 data_file 的值 (formatnul)。

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

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

    注意注意

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

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

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

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

      注意注意

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

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

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

    注意注意

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

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

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

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

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

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

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

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

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

    有关详细信息,请参阅管理大容量导入的批处理

  • -ddatabase_name
    指定要连接到的数据库。默认情况下,bcp.exe 连接到用户的默认数据库。

    如果指定了 -ddatabase_name 以及一个由三个部分组成的名称(database_name.schema.table,作为第一个参数传递给 bcp.exe),将发生错误。这是因为您无法两次指定此数据库名称。

    如果 database_name 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -d 与数据库名称之间添加空格。

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

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

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

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

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

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

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

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

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

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

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

    70 = SQL Server 7.0

    80 = SQL Server 2000

    90 = SQL Server 2005

    例如,若要为 SQL Server 7.0 不支持、但是在较高版本的 SQL Server 中引入的类型(例如,bigint、sql_variant 和 xml)生成数据,请使用 -V70 选项。

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

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

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

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

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

  • -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 编码)。

    有关详细信息,请参阅在不同排序规则间复制数据

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    安全说明安全说明

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

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

    安全说明安全说明

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

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

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

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

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

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

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

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

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

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

    有关保留标识值的详细信息,请参阅大容量导入数据时保留标识值

  • **-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。

      有关详细信息,请参阅导入大容量数据时控制触发器执行

注释

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

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

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

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

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

本机数据文件支持

在 SQL Server 2008 R2 中,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 AdventureWorks2008R2.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

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

权限

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

bcpin 操作要求至少对目标表有 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. 将表行复制到数据文件中(使用可信连接)

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

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

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

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

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

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

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

系统将提示您输入密码。

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

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

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

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

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

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

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

USE AdventureWorks2008R2;
GO
SELECT * FROM Sales.Currency2;

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

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

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

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

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

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

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

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

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

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

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

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

G. 创建非 XML 格式化文件

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

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

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

有关详细信息,请参阅了解非 XML 格式化文件

H. 创建 XML 格式化文件

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

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

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

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

有关详细信息,请参阅了解 XML 格式化文件

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

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

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

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

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