bcp を使用してフォーマット ファイルを作成する (SQL Server)

適用対象:SQL ServerAzure SQL データベースAzure SQL Managed InstanceAzure Synapse Analytics

この記事では、bcp ユーティリティ を使用して、特定のテーブルのフォーマット ファイルを作成する方法について説明します。 フォーマット ファイルは、指定されたデータ型のオプション (-n、-c、-w、または -N)、およびテーブルやビューの区切り記号から構成されます。

SQL Server テーブルに一括インポートする場合や、テーブルからデータを一括エクスポートする場合は、データ ファイルを書き込むための柔軟なシステムとしてフォーマット ファイルを使用できます。 フォーマット ファイルでは、他のデータ形式に準拠したり、他のソフトウェア プログラムからデータ ファイルを読み取るための編集を行う必要はほとんど (あるいはまったく) ありません。

制限事項

フォーマットファイルを読み取るための bcp ユーティリティ(bcp.exe)のバージョンは、フォーマットファイル作成に使われるバージョンと同じかそれ以降でなければなりません。 例えば、SQL Server 2025(17.x)bcp2022(16.x)SQL Serverbcpで生成されるバージョン16.0フォーマットのファイルを読み込めますが、2022(16.x)SQL Serverbcp2025(17.x)SQL Serverbcpで生成されるバージョン17.0フォーマットのファイルは読み取れません。

注

一括挿入を含むこの構文は、Azure Synapse Analytics ではサポートされていません。 Azure Synapse Analytics やその他のクラウド データベース プラットフォーム統合では、Azure Data Factory の COPY ステートメントを介して、または COPY INTO や PolyBase などの T-SQL ステートメントを使用してデータ移動を実行します。

フォーマット ファイルを作成する

SQL Serverは、非XML形式とXML形式の2種類のフォーマットファイルをサポートしています。 XML 以外のフォーマットとは、以前のバージョンの SQL Server でサポートされる従来のフォーマットです。

通常は、XML フォーマット ファイルと XML 以外のフォーマット ファイルの間には互換性があります。 ただし、XML フォーマット ファイルの方が XML 以外のフォーマット ファイルよりも優れた点がいくつかあるので、フォーマット ファイルには XML 構文を使用することをお勧めします。

この記事のコードサンプルは、AdventureWorks2025、AdventureWorksDW2025、またはAdventureWorksLT2025サンプルデータベースを使用しており、Azure Data SQL Samples Repository GitHubリポジトリからダウンロードできます。 Adventure Works Cycles は、データベースの概念とシナリオを説明するために使用する架空の製造会社です。

フォーマットファイルの作成

bcpを使ってフォーマットファイルを作成するには、format引数を指定し、データファイルのパスの代わりに nul を使用します。 formatオプションは常に-fオプションを必要とします。

XML形式ファイルを作成するには、bcp <table_or_view> format nul -f <format_file_name> -xなどの-xオプションを指定する必要があります。

XML形式のファイルを区別するために、ファイル名拡張子として .xml を使い、例えば MyTable.xmlを使います。

XML形式ファイルの構造やフィールドに関する情報は 、XMLフォーマットファイルを参照してください。

例

このセクションでは、 bcp を使ってフォーマットファイルを作成する方法を示す例が含まれています。 HumanResources.Department テーブルには、 DepartmentID、 Name、 GroupName、および ModifiedDateの 4 つの列があります。

A. 文字データのフォーマットファイルを作成する

以下の例は、文字データ形式を用いて HumanResources.Department テーブルのフォーマットファイルを作成します。

Department-c.xmlというXML形式のファイルを作成します。 フォーマット ファイルは、既定以外のフィールド ターミネータ (,) を使用します。 以下のセクションでは、生成されたフォーマットファイルの内容を示します。

bcpコマンドには以下の修飾子が含まれています。

修飾子 説明
format nul -x -f <format_file> XML フォーマット ファイルを指定します。
-c 文字データを指定します。
-t, コンマ (,) をフィールド ターミネータとして指定します。

注: データ ファイルで既定のフィールド ターミネータ (\t) が使用されている場合、-t スイッチは不要です。
-T bcpが統合セキュリティを用いて信頼できる接続を持つSQL Serverに接続することを指定します。 -Tを指定しない場合は、サインインするには-Uと-Pを指定する必要があります。

Windows コマンド プロンプトで、次の bcp コマンドを入力します。

bcp AdventureWorks2025.HumanResources.Department format nul -c -x -f Department-c.xml -t, -T

生成されるフォーマット ファイル Department-c.xmlには、次の XML 要素が含まれます。

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://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="24"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
</ROW>
</BCPFORMAT>

このフォーマットファイルの構文については、 XML formatファイルのご参照ください。 文字データに関する情報については、「 文字フォーマットを使ってデータのインポートまたはエクスポートをする」をご覧ください。

B. ネイティブデータ用のフォーマットファイルを作成します

以下の例は、ネイティブデータ型を用いて HumanResources.Department テーブルのフォーマットファイルを作成します。

Department-n.xmlというXML形式のファイルを作成します。 以下のセクションでは、生成されたフォーマットファイルの内容を示します。

bcpコマンドには以下の修飾子が含まれています。

修飾子 説明
format nul -x -f <format_file> XML フォーマット ファイルを指定します。
-n ネイティブ データ型を指定します。
-T bcpが統合セキュリティを用いて信頼できる接続を持つSQL Serverに接続することを指定します。 -Tを指定しない場合は、サインインするには-Uと-Pを指定する必要があります。

Windows コマンド プロンプトで、次の bcp コマンドを入力します。

bcp AdventureWorks2025.HumanResources.Department format nul -x -f Department-n.xml -n -T

生成されるフォーマット ファイル Department-n.xmlには、次の XML 要素が含まれます。

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
  <FIELD ID="1" xsi:type="NativeFixed" LENGTH="2"/>
  <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="NativeFixed" LENGTH="8"/>
</RECORD>
<ROW>
  <COLUMN SOURCE="1" NAME="DepartmentID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="GroupName" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="ModifiedDate" xsi:type="SQLDATETIME"/>
</ROW>
</BCPFORMAT>

このフォーマットファイルの構文については、 XML formatファイルのご参照ください。 ネイティブデータの使い方については、「 ネイティブフォーマットでデータをインポートまたはエクスポートする使用」をご覧ください。

C: Unicode ネイティブ データ用の XML 以外のフォーマット ファイルを作成する

HumanResources.Department テーブルの、Unicode ネイティブ データ用の XML 以外のフォーマット ファイルを作成するには、次のコマンドを使用します。

bcp AdventureWorks2025.HumanResources.Department format nul -T -N -f Department-n.fmt

Unicodeネイティブデータの使用方法については、「 Unicodeネイティブフォーマットを使ってデータのインポートまたはエクスポートを行う」をご覧ください。

D. Unicode 文字データ用の XML 以外のフォーマット ファイルを作成する

既定のターミネータを使用する HumanResources.Department テーブルの、Unicode 文字データ用の XML 以外のフォーマット ファイルを作成するには、次のコマンドを使用します。

bcp AdventureWorks2025.HumanResources.Department format nul -T -w -f Department-w.fmt

Unicode文字データの使い方については、「 Use Unicode character format to import/export」をご覧ください。

E. コード ページ オプションを使用してフォーマット ファイルを使用する

bcp formatを使ってフォーマットファイルを作成すると、コレーションやコードページの情報がフォーマットファイルに書き込まれます。

次に、照合順序が含まれる、5 つの列があるテーブル用のフォーマット ファイルの例を示します。

13.0
5
1  SQLCHAR         0       0       "\t"             1     c_0          Cyrillic_General_CS_AS
2  SQLCHAR         0       0       "\t"             2     c_1          Cyrillic_General_CS_AS
3  SQLCHAR         0       3000    "\t"             3     c_2          Cyrillic_General_CS_AS
4  SQLCHAR         0       5       "\t"             4     c_3          ""
5  SQLCHAR         0       41      "!!!\r\r\n"      5     c_4          ""

bcp in -c -C65001 -f format_file ...やBULK INSERT、OPENROWSET with FORMATFILE='format_file' CODEPAGE=65001 ...でSQL Serverデータをインポートしようとすると、フォーマットファイルのコレーションやコードページの情報が65001オプションよりも優先されます。

したがって、フォーマットファイルを生成する場合は、SQL Serverにデータをインポートする前に、生成されたフォーマットファイルからコレーション情報を自動的に削除する必要があります。

以下の例は、コレーション情報のないフォーマットファイルを示しています。

13.0
5
1  SQLCHAR         0       0       "\t"             1     c_0              ""
2  SQLCHAR         0       0       "\t"             2     c_1              ""
3  SQLCHAR         0       3000    "\t"             3     c_2              ""
4  SQLCHAR         0       5       "\t"             4     c_3              ""
5  SQLCHAR         0       41      "!!!\r\r\n"      5     c_4              ""

データ フィールドをテーブル列にマップする

bcpによって作成されたフォーマットファイルは、すべてのテーブル列を順番に記述します。 フォーマットファイルを修正して、テーブルの列を並べ替えたり省略したりすることができます。 フィールドとテーブル列とが直接マップされないデータ ファイル用に、フォーマット ファイルをカスタマイズできます。 詳細については、次の記事をご覧ください。