フォーマット ファイルを使用したデータ フィールドのスキップ (SQL Server)
データ ファイルには、テーブルの列数よりも多くのフィールドを格納できます。 このトピックでは、XML 以外のフォーマット ファイルと XML フォーマット ファイルの両方を変更し、データ ファイルに多くのフィールドを格納する方法について説明します。この操作は、テーブル列を対応するデータ フィールドにマップし、余分なフィールドを無視することによって行います。
Note
BCP コマンド、BULK INSERT ステートメント、または INSERT ..を使用して、XML または XML 以外のフォーマット ファイルを使用して、データ ファイルをテーブルに一括インポートできます。SELECT * FROM OPENROWSET(BULK...) ステートメント。 詳細については、「データの一括インポートでのフォーマット ファイルの使用 (SQL Server)」を参照してください。
サンプル データ ファイルとサンプル テーブル
このトピックで例として変更するフォーマット ファイルは、次のテーブルとデータ ファイルに基づいています。
サンプル テーブル
この例では、 という名前 myTestSkipField
のテーブルをスキーマの下の AdventureWorks2012 サンプル データベースに作成する dbo
必要があります。 このテーブルを作成するには、Microsoft SQL Server Management Studio クエリ エディターで次のコードを実行します。
USE AdventureWorks2012;
GO
CREATE TABLE myTestSkipField
(
PersonID smallint,
FirstName nvarchar(50) ,
LastName nvarchar(50)
);
GO
サンプル データ ファイル
データ ファイル myTestSkipField-c.dat
には、次のレコードが含まれています。
1,Skipme,DataField3,DataField4
1,Skipme,DataField3,DataField4
1,Skipme,DataField3,DataField4
myTestSkipField-c.dat
から myTestSkipField
テーブルにデータを一括インポートするには、フォーマット ファイルで次の操作を行う必要があります。
最初のデータ フィールドを最初の列
PersonID
にマップします。2 番目のデータ フィールドをスキップします。
3 番目のデータ フィールドを 2 番目の列
FirstName
にマップします。4 番目のデータ フィールドを 3 番目の列
LastName
にマップします。
より多くのデータ フィールドを格納するための XML 以外のフォーマット ファイル
次のフォーマット ファイル myTestSkipField.fmt
は、myTestSkipField-c.dat
のフィールドを myTestSkipField
テーブルの列にマップします。 このフォーマット ファイルでは、文字データ形式が使用されます。 列マッピングをスキップするには、フォーマット ファイルの ExtraField
列に示すように、その列の順序の値を 0 に変更する必要があります。
myTestSkipField.fmt
フォーマット ファイルには、次の情報が含まれています。
9.0
4
1 SQLCHAR 0 7 "," 1 PersonID ""
2 SQLCHAR 0 100 "," 0 ExtraField SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 100 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 100 "\r\n" 3 LastName SQL_Latin1_General_CP1_CI_AS
Note
XML 以外のフォーマット ファイルの構文については、「XML 以外のフォーマット ファイル (SQL Server)」を参照してください。
例
次の例では、INSERT ... SELECT * FROM OPENROWSET(BULK...)
フォーマット ファイルを使用して、myTestSkipField.fmt
を使用します。 この例では、 myTestSkipField-c.dat
データ ファイルを myTestSkipField
テーブルに一括インポートします。 サンプルのテーブルとデータ ファイルを作成するには、このトピックの「サンプル データ ファイルとサンプル テーブル」を参照してください。
SQL Server Management Studio クエリ エディターで、次のコードを実行します。
USE AdventureWorks2012;
GO
INSERT INTO myTestSkipField
SELECT *
FROM OPENROWSET(BULK 'C:\myTestSkipField-c.dat',
FORMATFILE='C:\myTestSkipField.fmt'
) AS t1;
GO
より多くのデータ フィールドを格納するための XML フォーマット ファイル
この例で提供されるフォーマット ファイルは、別のフォーマット ファイルである myTestSkipField.xml
に基づいています。このフォーマット ファイル全体では、文字データ形式が使用されます。また、フィールドの数と順序は myTestSkipField
テーブルの列と完全に一致しています。 そのフォーマット ファイルの内容を表示するには、「フォーマット ファイルの作成 (SQL Server)」を参照してください。
次のフォーマット ファイル myTestSkipField.xml
は、myTestSkipField-c.dat
のフィールドを myTestSkipField
テーブルの列にマップします。 このフォーマット ファイルでは、文字データ形式が使用されます。
myTestSkipField.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="7"/>
<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="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="3" NAME="FirstName" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="LastName" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
例
次の例では、INSERT ... SELECT * FROM OPENROWSET(BULK...)
フォーマット ファイルを使用して、myTestSkipField.Xml
を使用します。 この例では、 myTestSkipField-c.dat
データ ファイルを myTestSkipField
テーブルに一括インポートします。 サンプルのテーブルとデータ ファイルを作成するには、このトピックの「サンプル データ ファイルとサンプル テーブル」を参照してください。
SQL Server Management Studio クエリ エディターで、次のコードを実行します。
USE AdventureWorks2012;
GO
INSERT INTO myTestSkipField
SELECT *
FROM OPENROWSET(BULK 'C:\myTestSkipField-c.dat',
FORMATFILE='C:\myTestSkipField.xml'
) AS t1;
GO
Note
XML スキーマの構文と XML フォーマット ファイルのその他のサンプルについては、「XML フォーマット ファイル (SQL Server)」を参照してください。
参照
bcp ユーティリティ
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
フォーマット ファイルを使用したテーブル列のスキップ (SQL Server)
フォーマット ファイルを使用したテーブル列とデータ ファイル フィールドのマッピング (SQL Server)