使用格式化文件跳过数据字段 (SQL Server)

数据文件可以包含的字段数多于表中的列数。 本主题介绍如何修改非 XML 和 XML 格式化文件,以便通过将表列映射到相应的数据字段并忽略额外字段来容纳包含更多字段的数据文件。

注释

可以使用非 XML 或 XML 格式文件,通过 bcp 命令、BULK INSERT 语句或 INSERT ... SELECT * FROM OPENROWSET(BULK...) 语句将数据文件批量导入表中。 有关详细信息,请参阅使用格式化文件批量导入数据(SQL Server)。

示例数据文件和表

本主题中修改后的格式化文件的示例基于下表和数据文件。

示例表

这些示例要求在 AdventureWorks2012 示例数据库的 dbo 架构中创建一个名为myTestSkipField的表。 若要创建此表,请在 Microsoft SQL Server Management Studio 查询编辑器中运行以下代码:

USE AdventureWorks2012;  
GO  
CREATE TABLE myTestSkipField   
   (  
   PersonID smallint,  
   FirstName nvarchar(50) ,  
   LastName nvarchar(50)   
   );  
GO  

示例数据文件

数据文件 myTestSkipField-c.dat包含以下记录:

1,Skipme,DataField3,DataField4  
1,Skipme,DataField3,DataField4  
1,Skipme,DataField3,DataField4  

要将数据从myTestSkipField-c.dat批量导入到myTestSkipField表中,格式文件必须执行以下操作:

  • 将第一个数据字段映射到第一列。 PersonID

  • 跳过第二个数据字段。

  • 将第三个数据字段映射到第二列。 FirstName

  • 将第四个数据字段映射到第三列。 LastName

用于更多数据字段的非 XML 格式化文件

以下格式文件将 myTestSkipField-c.dat 中的字段映射到 myTestSkipField 表的列。 格式化文件使用字符数据格式。 跳过列映射需要将其列顺序值更改为 0,如格式化文件中的 ExtraField 列所示。

格式化 myTestSkipField.fmt 文件包含以下信息:

9.0  
4  
1       SQLCHAR       0       7       ","      1     PersonID               ""  
2       SQLCHAR       0       100       ","    0     ExtraField             SQL_Latin1_General_CP1_CI_AS  
3       SQLCHAR       0       100     ","      2     FirstName              SQL_Latin1_General_CP1_CI_AS  
4       SQLCHAR       0       100     "\r\n"   3     LastName               SQL_Latin1_General_CP1_CI_AS  
  

注释

有关非 XML 格式化文件的语法的信息,请参阅非 XML 格式化文件(SQL Server)。

例子

以下示例使用INSERT ... SELECT * FROM OPENROWSET(BULK...),并使用myTestSkipField.fmt格式文件。 该示例将数据文件myTestSkipField批量导入myTestSkipField-c.dat表中。 若要创建示例表和数据文件,请参阅本主题前面的“示例数据文件和表”。

在 SQL Server Management Studio 查询编辑器中,运行以下代码:

USE AdventureWorks2012;  
GO  
INSERT INTO myTestSkipField   
   SELECT *  
      FROM  OPENROWSET(BULK  'C:\myTestSkipField-c.dat',  
      FORMATFILE='C:\myTestSkipField.fmt'    
       ) AS t1;  
GO   

用于更多数据字段的 XML 格式化文件

此示例中显示的格式化文件基于另一个格式化文件myTestSkipField.xml。该文件始终使用字符数据格式,其字段在数量和顺序上与myTestSkipField表中的列完全对应。 若要查看该格式化文件的内容,请参阅“创建格式化文件”(SQL Server)。

以下格式文件myTestSkipField.xmlmyTestSkipField-c.dat中的字段映射到myTestSkipField表的列。 格式化文件使用字符数据格式。

格式化 myTestSkipField.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="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
 </RECORD>  
 <ROW>  
  <COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>  
  <COLUMN SOURCE="3" NAME="FirstName" xsi:type="SQLNVARCHAR"/>  
  <COLUMN SOURCE="4" NAME="LastName" xsi:type="SQLNVARCHAR"/>  
 </ROW>  
</BCPFORMAT>  

例子

以下示例使用INSERT ... SELECT * FROM OPENROWSET(BULK...)myTestSkipField.Xml格式化文件。 该示例将数据文件myTestSkipField批量导入myTestSkipField-c.dat表中。 若要创建示例表和数据文件,请参阅本主题前面的“示例数据文件和表”。

在 SQL Server Management Studio 查询编辑器中,运行以下代码:

USE AdventureWorks2012;  
GO  
INSERT INTO myTestSkipField   
  SELECT *  
      FROM  OPENROWSET(BULK  'C:\myTestSkipField-c.dat',  
      FORMATFILE='C:\myTestSkipField.xml'    
       ) AS t1;  
GO  
  

注释

有关 XML 架构的语法以及 XML 格式化文件的其他示例的信息,请参阅 XML 格式化文件(SQL Server)。

另请参阅

bcp 实用工具
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
使用格式化文件跳过表列 (SQL Server)
使用格式化文件将表列映射到数据文件字段 (SQL Server)