次の方法で共有


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

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

注意

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

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

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

サンプル テーブル

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

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

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

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

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

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

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

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

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

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

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

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

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