フォーマット ファイルを使用したデータ フィールドのスキップ
データ ファイルには、テーブルの列数よりも多くのフィールドを格納できます。このトピックでは、XML 以外のフォーマット ファイルと XML フォーマット ファイルの両方を変更し、データ ファイルに多くのフィールドを格納する方法について説明します。この操作は、テーブル列を対応するデータ フィールドにマップし、余分なフィールドを無視することによって行います。
メモ : |
---|
XML 以外のフォーマット ファイルまたは XML フォーマット ファイルを使用して、データ ファイルをテーブルに一括インポートできます。この操作は、bcp コマンド、BULK INSERT ステートメント、INSERT ... SELECT * FROM OPENROWSET(BULK...) ステートメントのいずれかを使用して実行します。詳細については、「データの一括インポートでのフォーマット ファイルの使用」を参照してください。 |
サンプル データ ファイルとサンプル テーブル
このトピックで例として変更するフォーマット ファイルは、次のテーブルとデータ ファイルに基づいています。
サンプル テーブル
以下の例を実行するには、dbo
スキーマに基づいて、myTestSkipField
という名前のテーブルを AdventureWorks
サンプル データベース内に作成する必要があります。このテーブルを作成するには、Microsoft SQL Server Management Studio クエリ エディタで、次のコードを実行します。
USE AdventureWorks;
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
メモ : |
---|
XML 以外のフォーマット ファイルの構文の詳細については、「XML 以外のフォーマット ファイルについて」を参照してください。 |
例
次の例では、myTestSkipField.fmt
フォーマット ファイルを使用して、INSERT ... SELECT * FROM OPENROWSET(BULK...)
を使用します。この例では、myTestSkipField-c.dat
データ ファイルを myTestSkipField
テーブルに一括インポートします。サンプルのテーブルとデータ ファイルを作成するには、このトピックの「サンプル データ ファイルとサンプル テーブル」を参照してください。
SQL Server Management Studio クエリ エディタで、次のコードを実行します。
USE AdventureWorks;
GO
INSERT INTO myTestSkipField
SELECT *
FROM OPENROWSET(BULK 'C:\myTestSkipField-c.dat',
FORMATFILE='C:\myTestSkipField.fmt'
) AS t1;
GO
より多くのデータ フィールドを格納するための XML フォーマット ファイル
この例で提供されるフォーマット ファイルは、別のフォーマット ファイルである myTestSkipField.xml
に基づいています。このフォーマット ファイル全体では、文字データ形式が使用されます。また、フィールドの数と順序は myTestSkipField
テーブルの列と完全に一致しています。フォーマット ファイルの内容を表示するには、「フォーマット ファイルの作成」を参照してください。
次のフォーマット ファイル 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>
例
次の例では、myTestSkipField.Xml
フォーマット ファイルを使用して、INSERT ... SELECT * FROM OPENROWSET(BULK...)
を使用します。この例では、myTestSkipField-c.dat
データ ファイルを myTestSkipField
テーブルに一括インポートします。サンプルのテーブルとデータ ファイルを作成するには、このトピックの「サンプル データ ファイルとサンプル テーブル」を参照してください。
SQL Server Management Studio クエリ エディタで、次のコードを実行します。
USE AdventureWorks;
GO
INSERT INTO myTestSkipField
SELECT *
FROM OPENROWSET(BULK 'C:\myTestSkipField-c.dat',
FORMATFILE='C:\myTestSkipField.xml'
) AS t1;
GO
メモ : |
---|
XML スキーマの構文と XML フォーマット ファイルのその他のサンプルの詳細については、「XML フォーマット ファイルについて」を参照してください。 |
参照
概念
フォーマット ファイルを使用したテーブル列のスキップ
フォーマット ファイルを使用したテーブル列とデータ ファイル フィールドのマッピング
その他の技術情報
bcp ユーティリティ
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)