データ ファイルには、テーブル内の対応する列とは異なる順序で配置されたフィールドを含めることができます。 このトピックでは、フィールドがテーブル列とは異なる順序で配置されているデータ ファイルに対応するように変更された 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)