格式化文件简介

更新日期: 2006 年 7 月 17 日

用于存储与特定表相关的数据文件中每个字段的格式信息的文件称为“格式化文件**”。格式化文件提供了大容量导出或大容量导入数据所需的全部格式信息。格式化文件为写入数据文件提供了一个灵活的系统,用户只需极少的编辑,甚至不需要编辑,即可写入符合其他数据格式的数据文件,或从其他软件读取数据文件。

在 Microsoft SQL Server 2000 和更早期的版本中,大容量导出和导入使用的是单一类型的格式化文件。在 Microsoft SQL Server 2005 中仍然支持这种文件。不过,SQL Server 2005 还支持可选的 XML 格式文件。原始类型的格式化文件称为“非 XML 格式化文件**”。

所有格式化文件都包含对数据文件中每个字段的说明。XML 格式化文件还包含对相应表列的说明。通常,XML 与非 XML 格式化文件可以互换。但是,建议您为新的格式化文件使用 XML 语法,因为与非 XML 格式化文件相比,格式化文件具有多项优点。XML 格式化文件具有以下特征:

  • 自描述且易于读取、创建和扩展。
  • 包含目标列的数据类型。
    这可以将数据文件中数据的表示形式与文件中每个字段相关联的数据类型分离开来。例如,如果数据文件包含字符表示形式的数据,则相应的 SQL 列类型会丢失。
    bcp 命令和 BULK INSERT 语句使用目标表列执行类型转换。因此目标表是必需的。相比之下,OPENROWSET(BULK...) 函数依赖 XML 格式化文件从数据文件读取数据。因此目标表是可选的。
  • 允许从数据文件加载包含单一大型对象 (LOB) 数据类型的字段。

有关每种类型的格式化文件的布局信息,请参阅本主题后面的“示例”部分。

何时需要使用格式化文件?

INSERT ... SELECT * FROM OPENROWSET(BULK...) 语句总是要求使用格式化文件。

对于 bcp 或 BULK INSERT,在简单情况下,使用格式化文件是可选的,而且很少需要。但是,对于复杂的大容量导入情况,通常都会需要格式化文件。例如,在将数据从数据文件导入到表中时,以下情况可能需要格式化文件:

  • 用户对目标表的某些列没有 INSERT 权限。
  • 具有不同架构的多个表使用同一数据文件作为数据源。
  • 数据文件中的列与目标表中的列顺序不同。
  • 数据文件中的数据元素包含不同的终止字符或前缀长度。

在以下情况下,必须使用格式化文件:

  • 数据文件中的字段数不同于目标表中的列数;例如:
    • 目标表中至少包含一个定义了默认值或允许为 NULL 的列。
    • 用户不具有对目标表的一个或多个列的 SELECT/INSERT 权限。
    • 具有不同架构的两个或多个表使用同一个数据文件。
  • 数据文件和表的列顺序不同。
  • 数据文件列的终止字符或前缀长度不同。
Aa337558.note(zh-cn,SQL.90).gif注意:
在缺少格式化文件的情况下,如果 bcp 命令指定了数据格式开关(-n-c-w-N),或者 BULK INSERT 操作指定了 DATAFILETYPE 选项,那么指定的数据格式将用作解释数据文件字段的默认方法。

示例

下面的示例说明了非 XML 格式化文件和 XML 格式化文件的布局。这些格式化文件对应于 AdventureWorks 示例数据库中的 HumanResources.myTeam 表。该表包含四列:EmployeeIDNameTitleModifiedDate

Aa337558.note(zh-cn,SQL.90).gif注意:
有关该表以及如何创建该表的信息,请参阅创建 HumanResources.myTeam 表

A. 使用非 XML 格式化文件

下面的非 XML 格式化文件为 HumanResources.myTeam 表使用 SQL Server 本机数据格式。此格式化文件是用下面的 bcp 命令创建的。

bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Fmt -n -T 
The contents of this format file are as follows: 9.0
4
1       SQLSMALLINT   0       2       ""   1     EmployeeID               ""
2       SQLNCHAR      2       100     ""   2     Name                     SQL_Latin1_General_CP1_CI_AS
3       SQLNCHAR      2       100     ""   3     Title                    SQL_Latin1_General_CP1_CI_AS
4       SQLNCHAR      2       100     ""   4     Background               SQL_Latin1_General_CP1_CI_AS

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

B. 使用 XML 格式化文件

下面的 XML 格式化文件为 HumanResources.myTeam 表使用 SQL Server 本机数据格式。此格式化文件是用下面的 bcp 命令创建的。

bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Xml -x -n -T 

格式化文件包含:

 <?xml version="1.0"?>
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="NativePrefix" LENGTH="1"/>
  <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="EmployeeID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Title" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="Background" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>

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

请参阅

概念

使用格式化文件

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 7 月 17 日

更改的内容: