次の方法で共有


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

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

Note

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

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

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

サンプル テーブル

このトピックの例では、 という名前 myTestOrder のテーブルをスキーマの下の AdventureWorks2012 サンプル データベースに作成する dbo 必要があります。 このテーブルを作成するには、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.fmt のフィールドを myTestOrder-c.txt テーブルの列にマップするフォーマット ファイル myTestOrder を示しています。 データ ファイルとテーブルの作成方法の詳細については、このトピックの「サンプル テーブルとデータ ファイル」を参照してください。 このフォーマット ファイルでは、文字データ形式が使用されます。

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

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  
  

Note

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

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

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

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

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

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

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>  
  

Note

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

次の例では OPENROWSET 一括行セット プロバイダーを実行し、XML フォーマット ファイル myTestOrder-c.txt を使用して myTestOrder データ ファイルから myTestOrder.xml サンプル テーブルにデータをインポートします。 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)