创建格式化文件

当向 SQL Server 表中大容量导入数据或从该表中大容量导出数据时,可以使用格式化文件存储与该表相关的数据文件中每个字段的格式化信息。格式化文件向需要很少编辑或无需编辑的写入数据文件提供灵活的系统,以符合其他数据格式或从其他软件程序中读取数据文件。

SQL Server 2005 及更高版本支持两种类型的格式化文件:非 XML 格式化文件和 XML 格式化文件。非 XML 格式是 SQL Server 早期版本支持的原始格式。

通常,XML 与非 XML 格式化文件可以互换。但是,建议您为新的格式化文件使用 XML 语法,因为与非 XML 格式化文件相比,格式化文件具有多项优点。有关详细信息,请参阅 格式化文件简介

注意注意

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

本主题说明了如何使用 bcp 实用工具为特定表创建格式化文件。格式化文件基于指定的数据类型选项(-n-c-w-N)以及表或视图分隔符。

创建非 XML 格式化文件

若要使用 bcp 命令创建格式化文件,请指定 format 参数并使用 nul 而不是数据文件路径。format 选项还需要 -f 选项,例如:

bcptable_or_viewformat nul -fformat_file_name

注意注意

为区分非 XML 格式化文件,我们建议使用 .fmt 作为文件扩展名,例如 MyTable.fmt。

有关非 XML 格式化文件的结构和字段的信息,请参阅了解非 XML 格式化文件

示例

本部分内容包含以下示例,展示了如何使用 bcp 命令创建非 XML 格式化文件:

  • A. 为本机数据创建非 XML 格式化文件

  • B. 为字符数据创建非 XML 格式化文件

  • C. 为 Unicode 本机数据创建非 XML 格式化文件

  • D. 为 Unicode 字符数据创建非 XML 格式化文件

本示例使用 AdventureWorks 示例数据库中的 HumanResources.Department 表。HumanResources.Department 表包含四列:DepartmentID、Name、GroupName 和 ModifiedDate。有关此表的定义,请参阅 Department 表 (AdventureWorks)

注意注意

Adventure Works Cycles 是一家虚构的制造公司,用于演示数据库概念和方案。

A. 为本机数据创建非 XML 格式化文件

下面的示例为 AdventureWorksHumanResources.Department 表创建 XML 格式化文件 Department-n.xml。格式化文件使用本机数据类型。在命令之后显示生成的格式化文件的内容。

bcp 命令包含以下限定符。

限定符

说明

formatnul-fformat_file

指定非 XML 格式化文件。

-n

指定本机数据类型。

-T

指定 bcp 实用工具通过使用集成安全性的受信任连接连接到 SQL Server。如果未指定 -T,则必须指定 -U-P 才能成功登录。

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

bcp AdventureWorks.HumanResources.Department format nul -T -n -f Department-n.fmt

生成的格式化文件 Department-n.fmt 包含以下信息:

9.0
4
1       SQLSMALLINT   0       2       ""   1     DepartmentID                 ""
2       SQLNCHAR      2       100     ""   2     Name                         SQL_Latin1_General_CP1_CI_AS
3       SQLNCHAR      2       100     ""   3     GroupName                    SQL_Latin1_General_CP1_CI_AS
4       SQLDATETIME   0       8       ""   4     ModifiedDate                 ""

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

B. 为字符数据创建非 XML 格式化文件

下面的示例为 AdventureWorksHumanResources.Department 表创建 XML 格式化文件 Department.fmt。格式化文件使用字符数据格式和非默认字段终止符 (,)。在命令之后显示生成的格式化文件的内容。

bcp 命令包含以下限定符。

限定符

说明

formatnul-fformat_file

指定非 XML 格式化文件。

-c

指定字符数据。

-T

指定 bcp 实用工具通过使用集成安全性的受信任连接连接到 SQL Server。如果未指定 -T,则必须指定 -U-P 才能成功登录。

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

bcp AdventureWorks.HumanResources.Department format nul -c -f Department-c.fmt -T

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

9.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 格式化文件

C. 为 Unicode 本机数据创建非 XML 格式化文件

若要为 HumanResources.Department 表中的 Unicode 本机数据创建非 XML 格式化文件,请使用以下命令:

bcp AdventureWorks.HumanResources.Department format nul -T -N -f Department-n.fmt

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

D. 为 Unicode 字符数据创建非 XML 格式化文件

若要为 HumanResources.Department 表中使用默认终止符的 Unicode 字符数据创建非 XML 格式化文件,请使用以下命令:

bcp AdventureWorks.HumanResources.Department format nul -T -w -f Department-w.fmt

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

创建 XML 格式化文件

若要使用 bcp 命令创建格式化文件,请指定 format 参数并使用 nul 而不是数据文件路径。format 选项通常要求指定 -f 选项;创建 XML 格式化文件时还必须指定 -x 选项,例如:

bcptable_or_viewformat nul-fformat_file_name-x

注意注意

为区分 XML 格式化文件,我们建议使用 .xml 作为文件扩展名,例如 MyTable.xml。

有关 XML 格式化文件的结构和字段的信息,请参阅了解 XML 格式化文件。有关语法信息,请参阅 XML 格式化文件的架构语法。例如,请参阅XML 格式化文件示例

示例

本部分内容包含以下示例,演示了如何使用 bcp 命令创建 XML 格式化文件:

  • A. 为字符数据创建 XML 格式化文件

  • B. 为本机数据创建 XML 格式化文件

本示例使用 AdventureWorks 示例数据库中的 HumanResources.Department 表。HumanResources.Department 表包含四列:DepartmentID、Name、GroupName 和 ModifiedDate。有关此表的定义,请参阅 Department 表 (AdventureWorks)

注意注意

Adventure Works Cycles 是一家虚构的制造公司,用于演示数据库概念和方案。

A. 为字符数据创建 XML 格式化文件

下面的示例为 AdventureWorksHumanResources.Department 表创建 XML 格式化文件 Department.xml。格式化文件使用字符数据格式和非默认字段终止符 (,)。在命令之后显示生成的格式化文件的内容。

bcp 命令包含以下限定符。

限定符

说明

formatnul-fformat_file-x

指定 XML 格式化文件。

-c

指定字符数据。

-t,

将逗号 (,) 指定为字段终止符。

注意注意
如果数据文件使用默认的字段终止符 (\t),则不需要 -t 开关。

-T

指定 bcp 实用工具通过使用集成安全性的受信任连接连接到 SQL Server。如果未指定 -T,则必须指定 -U-P 才能成功登录。

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

bcp AdventureWorks.HumanResources.Department format nul -c -x -f Department-c..xml –t, -T

生成的格式化文件 Department-c.xml 包含以下 XML 元素:

<?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="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="24"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
 </ROW>
</BCPFORMAT>

有关此格式化文件语法的信息,请参阅 XML 格式化文件的架构语法。有关字符数据的信息,请参阅使用字符格式导入或导出数据

B. 为本机数据创建 XML 格式化文件

下面的示例为 AdventureWorksHumanResources.Department 表创建 XML 格式化文件 Department-n.xml。格式化文件使用本机数据类型。在命令之后显示生成的格式化文件的内容。

bcp 命令包含以下限定符。

限定符

说明

formatnul-fformat_file-x

指定 XML 格式化文件。

-n

指定本机数据类型。

-T

指定 bcp 实用工具通过使用集成安全性的受信任连接连接到 SQL Server。如果未指定 -T,则必须指定 -U-P 才能成功登录。

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

bcp AdventureWorks.HumanResources.Department format nul -x -f Department-n..xml -n -T

生成的格式化文件 Department-n.xml 包含以下 XML 元素:

<?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="NativeFixed" LENGTH="2"/>
  <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="NativeFixed" LENGTH="8"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
 </ROW>
</BCPFORMAT>

有关此格式化文件语法的信息,请参阅 XML 格式化文件的架构语法。有关如何使用本机数据的信息,请参阅使用本机格式导入或导出数据

将数据字段映射到表列

如同使用 bcp 创建的一样,格式化文件按顺序说明所有表列。可以修改格式化文件以重新安排或忽略表列。这便于您针对字段未直接映射到表列的数据文件来自定义格式化文件。有关详细信息,请参阅以下主题: