対話モードを使用してデータを一括コピーする場合、保存形式、プレフィックス長、フィールド長、およびフィールドと行の終端文字について情報の保存を求めるメッセージが bcp ユーティリティによって表示されます。データ ファイルの各フィールドに対して形式情報を保存するために使用するファイルは、フォーマット ファイルと呼びます。
Do you want to save this format information in a file? [Y/n] y
Host filename: [bcp.fmt]
フォーマット ファイルのデフォルトの名前は Bcp.fmt です。ただし、別のファイル名を指定することもできます。
このフォーマット ファイルには、形式を再指定することなく、データ ファイルのデータを Microsoft® SQL Server™ のインスタンスに再び一括コピーするか、後にテーブルからデータを一括コピーするために使用するデフォルトの情報が含まれます。既存のフォーマット ファイルを使用して SQL Server のインスタンスとの間でデータを一括コピーする場合、bcp では既に記録された値を使用するのでファイル保存形式、プレフィックス長、フィールド長、またはフィールド終端文字の入力を求めるメッセージは表示されません。
SQL Server のインスタンスにデータをインポートするときに、既に作成されたフォーマット ファイルを使用するには、bcp ユーティリティで -f スイッチを使用するか、BULK INSERT ステートメントで FORMATFILE 句を使用します。たとえば、既に作成されたフォーマット ファイル (Authors.fmt) を使用して、pubs データベースの authors2 テーブルに、New_auth.dat データ ファイルの内容を一括コピーするコマンドは、次のようになります。
bcp pubs..authors2 in c:\new_auth.dat -fc:\authors.fmt -Sservername -Usa -Ppassword
BULK INSERT ステートメントは、bcp ユーティリティによって保存されたフォーマット ファイルを使用できます。以下に例を示します。
BULK INSERT pubs..authors2 FROM 'c:\new_auth.dat'
WITH (FORMATFILE = 'c:\authors.fmt')
フォーマット ファイルは特定の構成を持つタブ区切りされたテキスト ファイルです。
.gif)
次の表は、ファイル フォーマットの構造を説明しています。
| フィールド | 説明 |
| バージョン | bcp バージョン番号 |
| フィールドの数 | データ ファイルのフィールドの数フィールドの数は、すべての列で同じでなくてはなりません。 |
| ホスト ファイル フィールドの順序 | データ ファイルの各フィールドの位置。行の最初のフィールドは 1 になり、それ以降のフィールドにも順番に番号が付けられます。 |
| ホスト ファイル データ型 | データ ファイルの特定のフィールドに格納されるデータ型。ASCII データ ファイルでは sqlchar を使用します。ネイティブ形式のデータ ファイルでは、デフォルトのデータ型を使用します。詳細については、「ファイル保存形式」を参照してください。 |
| プレフィックス長 | フィールドのフィールド長プレフィックス文字の数。正当なプレフィックス長は、0、1、2、および 4 です。フィールド長プレフィックスを指定しない場合には、これを 0 に設定します。フィールドが NULL データ値を含む場合には、フィールド長プレフィックスを指定する必要があります。詳細については、「プレフィックス長」を参照してください。 |
| ホスト ファイルのデータ長 | データ ファイルの特定フィールドに格納されるデータ型の最大バイト数。詳細については、「フィールド長」を参照してください。 |
| 終端文字 | データ ファイルのフィールドを細分する区切り文字。共通終端文字には、カンマ (,)、タブ (\t)、および行末 (\r\n) があります。詳細については、「フィールド終端文字」を参照してください。 |
| サーバーの列の順序 | SQL Server テーブルに現れる列の順序。たとえば、データ ファイルの 4 番目のフィールドが SQL Server テーブルの 6 番目の列にマップされる場合には、その 4 番目のフィールドのサーバー列の順序は、6 になります。テーブルの列がデータ ファイルのデータを受け取らないようにするには、サーバー列の順序の値を 0 に設定します。 |
| サーバーの列名 | SQL Server のテーブルから受け取る列の名前。実際のフィールド名を使用する必要はありません。唯一の条件は、フォーマット ファイルのフィールドを空白にしてはならないことです。 |
| 照合順序 | 一括コピー データ ファイルに文字および Unicode データを格納するときに使用する照合順序。 |
注 フィールドがデータ ファイルに存在しない場合には、0 のプレフィックス長、0 の長さ、0 のサーバー列の順序、および終端文字なしを指定することによって、テーブル列のインポートをスキップできます。これによって、データ フィールドが、データ ファイルに存在しないことと、サーバー列はデータを読み込む必要がないことを効果的に示すことができます。
選択的なデータのコピー
bcp フォーマット ファイルを使用して、ファイルから SQL Server のインスタンスにデータを選択的に一括コピーできます。この機能を使用すると、データ ファイルのフィールドとテーブルの列に不一致がある場合に、テーブルに対してデータを転送できます。この方法は、データ ファイルのフィールドが次のような場合に使用できます。
- テーブルの列よりも少ない場合
- テーブルの列よりも多い場合
- テーブルの列とは順序が異なる場合
フォーマット ファイルを使用すると、データ ファイルにデータを追加したり、不必要なデータを削除したり、または既存のデータを再整列することなく、SQL Server のインスタンスに対してデータを一括コピーできます。
次の 3 つのトピックでは、データの一部を選択してコピーする例を示します。これらの例では、pubs データベースに authors2 という名前の authors のコピーを作成します。authors テーブルのコピーを作成するには、次のコマンドを実行します。
USE pubs
GO
SELECT * INTO authors2 FROM authors
GO
関連項目