データの一括インポートでのフォーマット ファイルの使用
このトピックでは、一括インポート操作でのフォーマット ファイルの使用方法について説明します。フォーマット ファイルでは、データ ファイルのフィールドがテーブルの列にマップされます。MicrosoftSQL Server 2005 以降のバージョンでは、XML 以外のフォーマット ファイルまたは XML フォーマット ファイルを使用して、データを一括インポートできます。この操作には、bcp コマンド、または Transact-SQL コマンドの BULK INSERT か INSERT ... SELECT * FROM OPENROWSET(BULK...) を使用します。
重要 |
---|
Unicode 文字データ ファイルを操作するフォーマット ファイルの場合、すべての入力フィールドが Unicode テキスト文字列 (つまり、固定サイズの Unicode 文字列または文字で終わる Unicode 文字列) でなければなりません。 |
注意 |
---|
フォーマット ファイルの詳細については、「XML 以外のフォーマット ファイルについて」および「XML フォーマット ファイルについて」を参照してください。 |
一括インポート コマンドのフォーマット ファイル オプション
次の表は、各一括インポート コマンドのフォーマット ファイル オプションを示しています。
一括読み込みコマンド |
フォーマット ファイル オプションの使用方法 |
---|---|
BULK INSERT |
FORMATFILE = 'format_file_path' |
INSERT ...SELECT * FROM OPENROWSET(BULK...) |
FORMATFILE = 'format_file_path' |
bcp ... in |
-fformat_file |
詳細については、「bcp ユーティリティ」、「BULK INSERT (Transact-SQL)」、または「OPENROWSET (Transact-SQL)」を参照してください。
注意 |
---|
SQLXML データを一括エクスポートまたは一括インポートする場合、フォーマット ファイルのデータ型には、SQLCHAR または SQLVARYCHAR (データはクライアント コード ページまたは照合順序で暗黙的に指定されるコード ページで送られます)、SQLNCHAR または SQLNVARCHAR (データは Unicode として送られます)、SQLBINARY または SQLVARYBIN (データは変換なしで送られます) のいずれかを使用します。 |
例
このセクションの例では、bcp コマンド、BULK INSERT ステートメント、および INSERT ...SELECT * FROM OPENROWSET(BULK...) ステートメントを使用してデータを一括インポートする場合のフォーマット ファイルの使用方法を示します。一括インポートの例を実行する前に、サンプル テーブル、データ ファイル、およびフォーマット ファイルを作成する必要があります。
サンプル テーブル
この例では、dbo スキーマの下にある AdventureWorks サンプル データベースで myTestFormatFiles というテーブルを作成する必要があります。このテーブルを作成するには、SQL Server Management Studio クエリ エディタで、次のコードを実行します。
USE AdventureWorks;
GO
CREATE TABLE myTestFormatFiles (
Col1 smallint,
Col2 nvarchar(50),
Col3 nvarchar(50),
Col4 nvarchar(50)
);
GO
サンプル データ ファイル
この例では、次のレコードが含まれているサンプル データ ファイル myTestFormatFiles-c.Dat を使用します。このデータ ファイルを作成するには、Microsoft Windows のコマンド プロンプトで次のように入力します。
10,Field2,Field3,Field4
15,Field2,Field3,Field4
46,Field2,Field3,Field4
58,Field2,Field3,Field4
サンプル フォーマット ファイル
このセクションの例では、XML フォーマット ファイル myTestFormatFiles-f-x-c.Xml を使用する場合と、XML 形式以外のフォーマット ファイルを使用する場合があります。どちらのフォーマット ファイルでも、文字データの形式と既定外のフィールド ターミネータ (,) を使用します。
XML 形式以外のフォーマット ファイルのサンプル
次の例では、bcp を使用して、myTestFormatFiles テーブルから XML フォーマット ファイルを生成します。myTestFormatFiles.Fmt ファイルには、次の情報が格納されます。
9.0
4
1 SQLCHAR 0 7 "," 1 Col1 ""
2 SQLCHAR 0 100 "," 2 Col2 SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 100 "," 3 Col3 SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 100 "\r\n" 4 Col4 SQL_Latin1_General_CP1_CI_AS
format オプションと共に bcp を使用して、このフォーマット ファイルを作成するには、Windows のコマンド プロンプトで次のように入力します。
bcp AdventureWorks..MyTestFormatFiles format nul -c -t, -f myTestFormatFiles.Fmt -T
フォーマット ファイルの作成方法の詳細については、「フォーマット ファイルの作成」を参照してください。
XML 形式のフォーマット ファイルのサンプル
次の例では、bcp を使用して、myTestFormatFiles テーブルから XML フォーマット ファイルを生成します。myTestFormatFiles.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="Col1" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="Col3" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="Col4" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
format オプションと共に bcp を使用して、このフォーマット ファイルを作成するには、Windows のコマンド プロンプトで次のように入力します。
bcp AdventureWorks..MyTestFormatFiles format nul -c -t, -x -f myTestFormatFiles.Xml -T
bcp の使用
次の例では、bcp を使用して、myTestFormatFiles-c.Dat データ ファイルのデータを AdventureWorks サンプル データベース内の HumanResources.myTestFormatFiles テーブルに一括インポートします。この例では、XML 形式のフォーマット ファイル MyTestFormatFiles.Xml を使用します。既存のテーブル行は、データ ファイルのインポート前に削除されます。
Windows のコマンド プロンプトで、次のように入力します。
bcp AdventureWorks..myTestFormatFiles in C:\myTestFormatFiles-c.Dat -f C:\myTestFormatFiles.Xml -T
注意 |
---|
このコマンドの詳細については、「bcp ユーティリティ」を参照してください。 |
BULK INSERT の使用
次の例では、BULK INSERT を使用して、myTestFormatFiles-c.Dat データ ファイルのデータを AdventureWorks サンプル データベース内の HumanResources.myTestFormatFiles テーブルに一括インポートします。この例では、XML 形式以外のフォーマット ファイル MyTestFormatFiles.Fmt を使用します。既存のテーブル行は、データ ファイルのインポート前に削除されます。
SQL Server Management Studio クエリ エディタで、次のコードを実行します。
USE AdventureWorks;
GO
DELETE myTestFormatFiles;
GO
BULK INSERT myTestFormatFiles
FROM 'C:\myTestFormatFiles-c.Dat'
WITH (FORMATFILE = 'C:\myTestFormatFiles.Fmt');
GO
SELECT * FROM myTestFormatFiles;
GO
注意 |
---|
このステートメントの詳細については、「BULK INSERT (Transact-SQL)」を参照してください。 |
OPENROWSET 一括行セット プロバイダの使用
次の例では、INSERT ... SELECT * FROM OPENROWSET(BULK...) を使用して、myTestFormatFiles-c.Dat データ ファイルのデータを AdventureWorks サンプル データベース内の HumanResources.myTestFormatFiles テーブルに一括インポートします。この例では、XML 形式のフォーマット ファイル MyTestFormatFiles.Xml を使用します。既存のテーブル行は、データ ファイルのインポート前に削除されます。
SQL Server Management Studio クエリ エディタで、次のコードを実行します。
USE AdventureWorks;
DELETE myTestFormatFiles;
GO
INSERT INTO myTestFormatFiles
SELECT *
FROM OPENROWSET(BULK 'C:\myTestFormatFiles-c.Dat',
FORMATFILE='C:\myTestFormatFiles.Xml'
) as t1 ;
GO
SELECT * FROM myTestFormatFiles;
GO
サンプル テーブルを使用し終わったら、次のステートメントを使用してテーブルを削除できます。
DROP TABLE myTestFormatFiles
注意 |
---|
OPENROWSET BULK 句の詳細については、「OPENROWSET (Transact-SQL)」を参照してください。 |