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>