フォーマット ファイルを使用したテーブル列とデータ ファイル フィールドのマッピング (SQL Server)

データ ファイルに含めるフィールドは、対応するテーブル内の列とは異なる順序に並べ替えることができます。 このトピックでは、テーブル列とは異なる順序にフィールドを並べ替えたデータ ファイルを格納できるように変更した XML フォーマット ファイルと XML 以外のフォーマット ファイルについて説明します。 変更したフォーマット ファイルのデータ フィールドは、対応するテーブル列にマッピングされます。

注意

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

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

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

サンプル テーブル

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

USE AdventureWorks2012;
GO
CREATE TABLE myTestOrder 
   (
   Col1 smallint,
   Col2 nvarchar(50) ,
   Col3 nvarchar(50) , 
   Col4 nvarchar(50) 
   );
GO

データ ファイル

データ ファイル myTestOrder-c.txt には、次のレコードが含まれています。

DataField3,DataField2,1,DataField4
DataField3,DataField2,1,DataField4
DataField3,DataField2,1,DataField4

myTestSkipCol2-c.dat から myTestSkipCol テーブルにデータを一括インポートするには、フォーマット ファイルで 1 番目のデータ フィールドを Col3、2 番目のデータ フィールドを Col2、3 番目のデータ フィールドを Col1、4 番目のデータ フィールドを Col4 にそれぞれマップする必要があります。

XML 以外のフォーマット ファイルの使用

列の順序を表す値を、対応するデータ フィールドの位置を指すように変更することにより、列マッピングの順序を変更できます。

次の XML 以外のフォーマット ファイルのサンプルは、myTestOrder-c.txt のフィールドを myTestOrder テーブルの列にマップするフォーマット ファイル myTestOrder.fmt を示しています。 データ ファイルとテーブルの作成方法の詳細については、このトピックの「サンプル テーブルとデータ ファイル」を参照してください。 このフォーマット ファイルでは、文字データ形式が使用されます。

フォーマット ファイルには、次の情報が含まれています。

9.0
4
1       SQLCHAR       0       100     ","     3     Col3               SQL_Latin1_General_CP1_CI_AS
2       SQLCHAR       0       100     ","     2     Col2               SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       7       ","     1     Col1               ""
4       SQLCHAR       0       100     "\r\n"  4     Col4               SQL_Latin1_General_CP1_CI_AS
注意

XML 以外のフォーマット ファイルのレイアウトの詳細については、「XML 以外のフォーマット ファイル (SQL Server)」を参照してください。

次の例では BULK INSERT ステートメントを実行し、XML 以外のフォーマット ファイル myTestOrder.fmt を使用して myTestOrder-c.txt データ ファイルから myTestOrder サンプル テーブルにデータを一括インポートします。

SQL Server Management Studio クエリ エディターで、次のように実行します。

USE AdventureWorks2012;
GO
BULK INSERT myTestOrder
FROM 'C:\myTestOrder-c.txt' 
WITH (formatfile='C:\myTestOrder.fmt');
GO

XML フォーマット ファイルの使用

次の XML 以外のフォーマット ファイルのサンプルは、myTestOrder-c.txt のフィールドを myTestOrder テーブルの列にマップするフォーマット ファイル myTestOrder.xml を示しています。データ ファイルとテーブルの作成方法の詳細については、このトピックの「サンプル テーブルとデータ ファイル」を参照してください。

myTestOrder.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="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <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="7"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="3" NAME="Col1" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="1" NAME="Col3" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="Col4" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>
注意

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

次の例では OPENROWSET 一括行セット プロバイダーを実行し、XML フォーマット ファイル myTestOrder.xml を使用して myTestOrder-c.txt データ ファイルから myTestOrder サンプル テーブルにデータをインポートします。 INSERT... SELECT ステートメントの選択リストには、列リストを指定します。

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

USE AdventureWorks2012;
GO
INSERT INTO myTestOrder 
  SELECT Col1, Col2, Col3, Col4
      FROM  OPENROWSET(BULK  'C:\myTestOrder-c.txt',
      FORMATFILE='C:\myTestOrder.Xml'  
       ) AS t1;
GO

関連項目

概念

フォーマット ファイルを使用したテーブル列のスキップ (SQL Server)

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