使用 bcp 指定数据格式以获得兼容性

当大容量导出 Microsoft SQL Server 数据以大容量导入到其他程序(如另一个数据库程序)时,源表中的默认数据格式(本机、字符或 Unicode)可能与其他程序所需的数据布局不兼容。如果存在不兼容,则导出数据时,必须说明数据布局。

注意注意

如果不熟悉导入或导出数据的数据格式,请参阅用于导入或导出数据的数据格式

bcp 命令允许您按照下列数据格式属性指定数据文件中每个字段的结构:

  • 文件存储类型

    “文件存储类型”说明数据在数据文件中的存储方式。数据可以按其数据库表类型(本机格式)、字符表示形式(字符格式)或支持隐式转换的任何数据类型导出到数据文件中;例如,以 int 形式复制 smallint。用户定义的数据类型将按其基类型导出。有关详细信息,请参阅使用 bcp 指定文件存储类型

  • 前缀长度

    当以本机格式将数据大容量导出到数据文件中时,为使文件存储空间最为紧凑,bcp 命令将在每个字段前面使用一个或多个字符来指示字段的长度。这些字符称为“长度前缀字符”。有关详细信息,请参阅指定数据文件中的前缀长度

  • 字段长度

    字段长度指示以字符格式表示数据时所要求的最大字符数。如果数据以本机格式存储,则字段长度已知。有关详细信息,请参阅使用 bcp 指定字段长度

  • 字段终止符

    对于字符数据字段,可以选择使用终止符标记数据文件中每个字段的结尾(使用“字段终止符”)以及每行的结尾(使用“行终止符”)。终止符是为读取数据文件的程序提供的一种方法,用于指出一个字段或行的结束位置和另一个字段或行的开始位置。有关详细信息,请参阅指定字段终止符和行终止符

字段特定的提示概述

如果交互式 bcp 命令包含 inout 选项,但既不包含格式化文件开关 (-f) 也不包含数据格式开关(-n-c-w-N),则该命令将针对源表或目标表中的每列依次提示输入上述每个属性。在每个提示中,bcp 命令都根据表列的 SQL Server 数据类型提供一个默认值。接受所有提示的默认值生成的结果与在命令行指定本机格式 (-n) 生成的结果相同。每个提示都会显示一个用方括号括起来的默认值:[default]。按 Enter 即接受显示的默认值。若要指定与默认值不同的值,请在提示符下输入新值。

示例

以下示例使用 bcp 命令以交互方式将 HumanResources.myTeam 表中的数据大容量导出到 myTeam.txt 文件中。在运行该示例之前,必须创建此表。有关该表和如何创建该表的信息,请参阅创建 HumanResources.myTeam 表

由于命令中既未指定格式化文件,也未指定数据类型,因此 bcp 将提示输入数据格式信息。在 Microsoft Windows 命令提示符下输入:

bcp AdventureWorks2008R2.HumanResources.myTeam out myTeam.txt -T

对于每列,bcp 都提示输入字段特定的值。以下示例显示了针对表中 EmployeeID 和 Name 两个字段的提示,并为每列提供了建议的默认文件存储类型(本机格式)。EmployeeID 和 Name 列的前缀长度分别为 0 和 2。用户指定英文逗号 (,) 作为每个字段的终止符。

Enter the file storage type of field EmployeeID [smallint]:

Enter prefix-length of field EmployeeID [0]:

Enter field terminator [none]:,

Enter the file storage type of field Name [nvarchar]:

Enter prefix length of field Name [2]:

Enter field terminator [none]:,

.

.

.

依次针对每个表列显示以上提示(根据需要)。

将逐个字段数据存储在非 XML 格式化文件中

指定所有的表列后,bcp 命令将提示选择生成非 XML 格式化文件,以存储刚刚得到的逐个字段信息(请参阅上述示例)。如果选择生成格式化文件,则可以随时从表中导出数据,也可以将结构类似的数据导入 SQL Server。

注意注意

可以使用格式化文件将数据文件中的数据大容量导入到 SQL Server 的实例中,也可以使用格式化文件从表中大容量导出数据,而无需重新指定格式。有关详细信息,请参阅用来导入或导出数据的格式化文件

以下示例创建一个名为 myFormatFile.fmt 的非 XML 格式化文件:

Do you want to save this format information in a file? [Y/n] y

Host filename: [bcp.fmt]myFormatFile.fmt

该格式化文件的默认名称为 bcp.fmt,但您可以指定其他文件名。

注意注意

对于使用单一数据格式(如字符或本机格式)作为存储类型的数据文件,可以快速创建格式化文件,而无需使用 format 选项导出或导入数据。这种方法的优点在于操作简单以及允许用户创建 XML 格式化文件或非 XML 格式化文件。有关详细信息,请参阅创建格式化文件

本节内容

本节包含下列主题。

主题

数据格式属性

使用 bcp 指定文件存储类型

介绍了在 bcp 命令中指定文件存储类型。

指定数据文件中的前缀长度

介绍了在 bcp 命令中指定前缀长度。

使用 bcp 指定字段长度

介绍了在 bcp 命令中指定字段长度。

指定字段终止符和行终止符

介绍了在 bcp 命令中指定字段终止符和行终止符。

以字符格式存储数据

介绍了如何将字符格式的数据存储在导出的数据文件中。