次の方法で共有


フォーマット ファイルを使用してテーブル列を Data-File フィールドにマップする (SQL Server)

データ ファイルには、テーブル内の対応する列とは異なる順序で配置されたフィールドを含めることができます。 このトピックでは、フィールドがテーブル列とは異なる順序で配置されているデータ ファイルに対応するように変更された XML 以外のフォーマット ファイルと XML 形式ファイルの両方について説明します。 変更されたフォーマット ファイルは、データ フィールドを対応するテーブル列にマップします。

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

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

このトピックの変更されたフォーマット ファイルの例は、次の表とデータ ファイルに基づいています。

サンプル テーブル

このトピックの例では、adventureWorks2012 サンプル データベースの dbo スキーマにmyTestOrderという名前のテーブルを作成する必要があります。 このテーブルを作成するには、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 テーブルにデータを一括インポートするには、フォーマット ファイルで最初のデータ フィールドを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一括行セット プロバイダーを使用して、myTestOrder.xml 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)