XML 格式化文件示例

本主题中的示例说明了使用 XML 格式化文件的各主要方面。格式化文件的语法与操作的方向无关;即大容量导出和大容量导入中使用的语法相同。

下列示例说明了以下操作内容:

  • 对字符数据字段和表列进行相同的排序

  • 对数据字段和表列进行不同的排序

  • 省略数据字段

  • 将各种类型的字段映射到列

  • 将 XML 数据映射到表

  • 导入固定长度或固定宽度的字段

注意注意

有关如何创建格式化文件的信息,请参阅创建格式化文件

示例

在下列示例所示数据文件中,<tab> 表示数据文件中的一个制表符,<return> 表示一个回车符。

A. 对字符数据字段和表列进行相同的排序

下面的示例显示了一个 XML 格式化文件,该文件描述一个包含三个字符数据字段的数据文件。格式化文件将数据文件映射到包含三列的表中。数据字段与表中的列一一对应。

**表(行):**Person (Age int, FirstName varchar(20), LastName varchar(30))

**数据文件(记录):**Age<tab>Firstname<tab>Lastname<return>

以下 XML 格式化文件从数据文件读取数据到表中。

在 <RECORD> 元素中,格式化文件将所有三个字段中的数据值表示为字符数据。对于每个字段,TERMINATOR 属性指示位于数据值后面的终止符。

数据字段与表中的列一一对应。在 <ROW> 元素中,格式化文件将 Age 列映射到第一个字段,将 FirstName 列映射到第二个字段,将 LastName 列映射到第三个字段。

<?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="\t" 
      MAX_LENGTH="12"/> 
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" 
      MAX_LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" 
      MAX_LENGTH="30" 
      COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT"/>
    <COLUMN SOURCE="2" NAME="firstname" xsi:type="SQLVARYCHAR"/>
    <COLUMN SOURCE="3" NAME="lastname" xsi:type="SQLVARYCHAR"/>
  </ROW>
</BCPFORMAT>
注意注意

有关等效的 AdventureWorks2008R2 示例,请参阅创建格式化文件

B. 对数据字段和表列进行不同的排序

下面的示例显示了一个 XML 格式化文件,该文件描述一个包含三个字符数据字段的数据文件。格式化文件将数据文件映射到包含三列(与数据文件的字段排序方式不同)的表中。

**表(行):**Person (Age int, FirstName varchar(20), LastName varchar(30))

数据文件(记录):Age<tab>Lastname<tab>Firstname<return>

在 <RECORD> 元素中,格式化文件将所有三个字段中的数据值表示为字符数据。

在 <ROW> 元素中,格式化文件将 Age 列映射到第一个字段,将 FirstName 列映射到第三个字段,将 LastName 列映射到第二个字段。

<?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="\t" 
      MAX_LENGTH="12"/>
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="20" 
      COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" 
      MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT"/>
    <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR"/>
    <COLUMN SOURCE="2" NAME="lastname" xsi:type="SQLVARYCHAR"/>
  </ROW>
</BCPFORMAT>
注意注意

有关等效的 AdventureWorks2008R2 示例,请参阅使用格式化文件将表列映射到数据文件字段

C. 省略数据字段

下面的示例显示了一个 XML 格式化文件,该文件描述一个包含四个字符数据字段的数据文件。格式化文件将数据文件映射到包含三列的表中。第二个数据字段不与任何表列对应。

**表(行):**Person (Age int, FirstName Varchar(20), LastName Varchar(30))

**数据文件(记录):**Age<tab>employeeID<tab>Firstname<tab>Lastname<return>

在 <RECORD> 元素中,格式化文件将所有四个字段中的数据值表示为字符数据。对于每个字段,TERMINATOR 属性指示位于数据值后面的终止符。

在 <ROW> 元素中,格式化文件将 Age 列映射到第一个字段,将 FirstName 列映射到第三个字段,将 LastName 列映射到第四个字段。

<?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="\t" 
      MAX_LENGTH="12"/>
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" 
      MAX_LENGTH="10" 
      COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t" 
      MAX_LENGTH="20" 
      COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" 
      MAX_LENGTH="30" 
      COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT"/>
    <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR"/>
    <COLUMN SOURCE="4" NAME="lastname" xsi:type="SQLVARYCHAR"/>
  </ROW>
</BCPFORMAT>
注意注意

有关等效的 AdventureWorks2008R2 示例,请参阅使用格式化文件跳过数据字段

D. 将 <FIELD> xsi:type 映射到 <COLUMN> xsi:type

下面的示例显示了各种类型的字段及其与列的映射。

<?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 xsi:type="CharTerm" ID="C1" TERMINATOR="\t" 
            MAX_LENGTH="4"/>
      <FIELD xsi:type="CharFixed" ID="C2" LENGTH="10" 
         COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS"/>
      <FIELD xsi:type="CharPrefix" ID="C3" PREFIX_LENGTH="2" 
         MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS"/>
      <FIELD xsi:type="NCharTerm" ID="C4" TERMINATOR="\t" 
         MAX_LENGTH="4"/>
      <FIELD xsi:type="NCharFixed" ID="C5" LENGTH="10" 
         COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS"/>
      <FIELD xsi:type="NCharPrefix" ID="C6" PREFIX_LENGTH="2" 
         MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS"/>
      <FIELD xsi:type="NativeFixed" ID="C7" LENGTH="4"/>
   </RECORD>
   <ROW>
      <COLUMN SOURCE="C1" NAME="Age" xsi:type="SQLTINYINT"/>
      <COLUMN SOURCE="C2" NAME="FirstName" xsi:type="SQLVARYCHAR" 
      LENGTH="16" NULLABLE="NO"/>
      <COLUMN SOURCE="C3" NAME="LastName" />
      <COLUMN SOURCE="C4" NAME="Salary" xsi:type="SQLMONEY"/>
      <COLUMN SOURCE="C5" NAME="Picture" xsi:type="SQLIMAGE"/>
      <COLUMN SOURCE="C6" NAME="Bio" xsi:type="SQLTEXT"/>
      <COLUMN SOURCE="C7" NAME="Interest"xsi:type="SQLDECIMAL" 
      PRECISION="5" SCALE="3"/>
   </ROW>
</BCPFORMAT>

E. 将 XML 数据映射到表

下面的示例创建了一个空的两列表 (t_xml),表中的第一列映射到 int 数据类型,第二列映射到 xml 数据类型。

CREATE TABLE t_xml (c1 int, c2 xml)

以下 XML 格式化文件将数据文件加载到表 t_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="NativePrefix" PREFIX_LENGTH="1"/>
  <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="8"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="c1" xsi:type="SQLINT"/>
  <COLUMN SOURCE="2" NAME="c2" xsi:type="SQLNCHAR"/>
 </ROW>
</BCPFORMAT>

F. 导入固定长度或固定宽度的字段

下面的示例分别介绍包含 10 个或 6 个字符的固定字段。格式化文件将这些字段的长度/宽度分别表示为 LENGTH="10" 和 LENGTH="6"。数据文件中各行以回车符和换行符的组合 {CR}{LF} 结尾,格式化文件将该组合表示为 TERMINATOR="\r\n"。

<?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="CharFixed" LENGTH="10"/>
    <FIELD ID="2" xsi:type="CharFixed" LENGTH="6"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="C1" xsi:type="SQLINT" />
    <COLUMN SOURCE="2" NAME="C2" xsi:type="SQLINT" />
  </ROW>
</BCPFORMAT>

其他示例

有关非 XML 格式化文件和 XML 格式化文件的其他示例,请参阅下列主题: