了解非 XML 格式化文件

在 SQL Server 2000 和更早版本中,大容量导出和导入使用的是单一类型的格式化文件。SQL Server 2005 及更高版本仍支持这种文件,此外还支持 XML 格式化文件以作备选之用。为了与原始类型的格式化文件区分开来,将它们统称为“非 XML 格式化文件”。

注意注意

XML 格式化文件具有一些优点。有关详细信息,请参阅用来导入或导出数据的格式化文件

通常,使用 bcp 命令来创建特定数据格式的格式化文件的方法有下列几种,您可以选择使用:

  • 通过在 bcp 命令中指定 format 选项,可以创建任一类型的格式化文件,例如字符数据或本机数据。有关详细信息,请参阅创建格式化文件

  • 还可以创建非 XML 格式化文件,这种文件包含为每个数据字段交互式指定的属性。有关详细信息,请参阅使用 bcp 指定数据格式以获得兼容性

    注意注意

    当在 bcp 命令中指定某个现有的格式化文件时,该命令就使用记录在该格式化文件中的值,而不提示您输入文件存储类型、前缀长度、字段长度或字段终止符。

非 XML 格式化文件的结构

非 XML 格式化文件是具有特殊结构的文本文件。非 XML 格式化文件包含了有关每个表列的文件存储类型、前缀长度、字段长度和字段终止符的信息。

下图显示了一个示例非 XML 格式化文件的格式化文件字段。

标识非 XML 格式文件的字段

“版本”和“列数”字段仅出现一次。下表对其意义进行了说明。

格式化文件字段

说明

版本

格式化文件的版本号。对于大多数版本的 SQL Server,格式化文件版本与 bcp 实用工具 (Bcp.exe) 相同,如下所示:

SQL Server 版本格式化文件版本bcp 版本1
SQL Server 7.0 版7.07.0
SQL Server 2000 8.08.0
SQL Server 2005 9.09.0
SQL Server 2008 10.010.0
SQL Server 2008 R2 10.010.50

1该版本号仅可由 bcp 识别,而无法由 Transact-SQL 识别。

注意注意
读取格式化文件所用的 bcp 实用工具的版本必须与格式化文件的版本相同或更高。例如,SQL Server 2008bcp 可以读取由 SQL Server 2005bcp 生成的 9.0 版格式化文件,但 SQL Server 2005bcp 无法读取由 SQL Server 2008 或 SQL Server 2008 R2bcp 生成的 10.0 版格式化文件。

列数

数据文件中字段的数目。该数目必须在所有行中都相同。

其他格式化文件字段说明需要大容量导入或导出的数据字段。每个数据字段都需在格式化文件中占单独一行。每个格式化文件行均包含下表中说明的格式化文件字段的值。

格式化文件字段

说明

宿主文件字段顺序

用以表示数据文件中每个字段的位置的数字。行中的第一个字段为 1,依此类推。

宿主文件数据类型

表示存储在数据文件的给定字段中的数据类型。对于 ASCII 数据文件,使用 SQLCHAR;对于本机格式数据文件,使用默认的数据类型。有关详细信息,请参阅使用 bcp 指定文件存储类型

前缀长度

字段长度前缀字符的数目。有效前缀长度是 0、1、2、4 和 8。若要避免指定长度前缀,将其设置为 0。如果字段包含 NULL 数据值,则必须指定长度前缀。有关详细信息,请参阅指定数据文件中的前缀长度

宿主文件数据长度

数据文件的特定字段中所存储的数据类型的最大长度(按字节计)。

如果您正在为带分隔符的文本文件创建非 XML 格式化文件,则可以将每个数据字段的宿主文件数据长度指定为 0。当带分隔符的文本文件的前缀长度为 0 并导入终止符时,可忽略字段长度值,因为字段所使用的存储空间等于数据加上终止符的长度。

有关详细信息,请参阅使用 bcp 指定字段长度

终止符

用来分隔数据文件中各字段的分隔符。常用的终止符为逗号 (,)、制表符 (\t) 和行结束符 (\r\n)。有关详细信息,请参阅指定字段终止符和行终止符

服务器列顺序

列在 SQL Server 表中显示的顺序。例如,如果数据文件的第四个字段映射到 SQL Server 表中的第六列,则第四个字段的服务器列顺序为 6。

若要阻止表中的某个列接收数据文件中的任何数据,则可以将服务器列顺序值设置为 0。

服务器列名

从 SQL Server 表中复制的列名。无需使用字段的实际名称,但格式化文件中的字段不得为空。

列排序规则

排序规则用于在数据文件中存储字符和 Unicode 数据。

注意注意

您可以修改格式化文件,以便从字段编号或顺序与表列的编号或顺序不同的数据文件进行大容量导入。有关详细信息,请参阅在大容量导入期间使用格式化文件将字段映射到列

示例

下面的示例显示了一个以前创建的非 XML 格式化文件 (myDepartmentIdentical-f-c.fmt)。该文件描述了 AdventureWorks2008R2 示例数据库中的 HumanResources.Department 表中每一列的字符数据字段。

生成的格式化文件 myDepartmentIdentical-f-c.fmt 包含以下信息:

10.0
4
1       SQLCHAR       0       7       "\t"     1     DepartmentID     ""
2       SQLCHAR       0       100     "\t"     2     Name             SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       100     "\t"     3     GroupName        SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR       0       24      "\r\n"   4     ModifiedDate     ""
注意注意

有关显示与该非 XML 格式化文件示例相关的格式化文件字段的图,请参阅本主题前面介绍的“非 XML 格式化文件的结构”。