フォーマット ファイルを使用したデータ フィールドのスキップ

データ ファイルには、テーブルの列数よりも多くのフィールドを格納できます。このトピックでは、XML 以外のフォーマット ファイルと XML フォーマット ファイルの両方を変更し、データ ファイルに多くのフィールドを格納する方法について説明します。この操作は、テーブル列を対応するデータ フィールドにマップし、余分なフィールドを無視することによって行います。

注意

XML 以外のフォーマット ファイルまたは XML フォーマット ファイルを使用して、データ ファイルをテーブルに一括インポートできます。この操作は、bcp コマンド、BULK INSERT ステートメント、INSERT ... SELECT * FROM OPENROWSET(BULK...) ステートメントのいずれかを使用して実行します。詳細については、「データの一括インポートでのフォーマット ファイルの使用」を参照してください。

サンプル データ ファイルとサンプル テーブル

このトピックで例として変更するフォーマット ファイルは、次のテーブルとデータ ファイルに基づいています。

サンプル テーブル

以下の例を実行するには、dbo スキーマに基づいて、myTestSkipField という名前のテーブルを AdventureWorks サンプル データベース内に作成する必要があります。このテーブルを作成するには、Microsoft SQL Server Management Studio クエリ エディターで、次のコードを実行します。

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

USE AdventureWorks2008R2;
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

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

myTestSkipField-c.dat から myTestSkipField テーブルにデータを一括インポートするには、フォーマット ファイルで次の操作を行う必要があります。

  • 最初のデータ フィールドを最初の列 PersonID にマップします。

  • 2 番目のデータ フィールドをスキップします。

  • 3 番目のデータ フィールドを 2 番目の列 FirstName にマップします。

  • 4 番目のデータ フィールドを 3 番目の列 LastName にマップします。

より多くのデータ フィールドを格納するための XML 以外のフォーマット ファイル

次のフォーマット ファイル myTestSkipField.fmt は、myTestSkipField-c.dat のフィールドを myTestSkipField テーブルの列にマップします。このフォーマット ファイルでは、文字データ形式が使用されます。列マッピングをスキップするには、フォーマット ファイルの ExtraField 列に示すように、その列の順序の値を 0 に変更する必要があります。

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

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 以外のフォーマット ファイルについて」を参照してください。

次の例では、myTestSkipField.fmt フォーマット ファイルを使用して、INSERT ... SELECT * FROM OPENROWSET(BULK...) を使用します。この例では、myTestSkipField-c.dat データ ファイルを myTestSkipField テーブルに一括インポートします。サンプルのテーブルとデータ ファイルを作成するには、このトピックの「サンプル データ ファイルとサンプル テーブル」を参照してください。

SQL Server Management Studio クエリ エディターで、次のコードを実行します。

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

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

より多くのデータ フィールドを格納するための XML フォーマット ファイル

この例で提供されるフォーマット ファイルは、別のフォーマット ファイルである myTestSkipField.xml に基づいています。このフォーマット ファイル全体では、文字データ形式が使用されます。また、フィールドの数と順序は myTestSkipField テーブルの列と完全に一致しています。フォーマット ファイルの内容を表示するには、「フォーマット ファイルの作成」を参照してください。

次のフォーマット ファイル myTestSkipField.xml は、myTestSkipField-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>

<?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>

次の例では、myTestSkipField.Xml フォーマット ファイルを使用して、INSERT ... SELECT * FROM OPENROWSET(BULK...) を使用します。この例では、myTestSkipField-c.dat データ ファイルを myTestSkipField テーブルに一括インポートします。サンプルのテーブルとデータ ファイルを作成するには、このトピックの「サンプル データ ファイルとサンプル テーブル」を参照してください。

SQL Server Management Studio クエリ エディターで、次のコードを実行します。

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

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

XML スキーマの構文と XML フォーマット ファイルのその他のサンプルの詳細については、「XML フォーマット ファイルについて」を参照してください。