bcp を使用した互換性のためのデータ形式の指定

別のデータベース プログラムなど、他のプログラムに一括インポートするために Microsoft SQL Server データを一括エクスポートするときに、ソース テーブルの既定のデータ形式 (ネイティブ、文字、または Unicode) が、他のプログラムで想定されているデータ レイアウトと互換性がない場合があります。互換性がない場合はデータをエクスポートするときに、データ レイアウトを記述する必要があります。

注意

データのインポートやエクスポートのデータ形式について詳しく理解していない場合は、「データをインポートまたはエクスポートするためのデータ形式」を参照してください。

bcp コマンドにより、次のデータ形式属性に関して、データ ファイル内の各フィールドの構造を指定できます。

  • ファイル保存形式

    ファイル ストレージ型は、データ ファイルへのデータの格納方法を記述します。データ ファイルには、データベース テーブルの型 (ネイティブ形式)、文字表現 (文字形式)、または暗黙的な型変換がサポートされているデータ型のいずれかでデータをエクスポートできます。暗黙的な型変換では、たとえば、smallint は int としてコピーされます。ユーザー定義のデータ型は、基本データ型としてエクスポートされます。詳細については、「bcp を使用したファイル ストレージ型の指定」を参照してください。

  • プレフィックス長

    bcp コマンドでは、ネイティブ形式のデータをデータ ファイルに一括エクスポートするためのファイル ストレージが最も少なくなるように、各フィールドの前にそのフィールドの長さを 1 文字以上の文字列で指定します。このような文字列を、プレフィックス長文字列と呼びます。詳細については、「データ ファイルのプレフィックス長の指定」を参照してください。

  • フィールド長

    フィールド長は、文字形式でデータを表現するために必要な文字の最大数を示します。データがネイティブ形式で格納される場合、フィールド長は既にわかっています。詳細については、「bcp を使用したフィールド長の指定」を参照してください。

  • フィールド ターミネータ

    文字列データ フィールドでは、省略可能なターミネータ文字を使用して、データ ファイルの各フィールドの末尾 (フィールド ターミネータを使用) と各行の末尾 (行ターミネータを使用) を示すことができます。ターミネータ文字は、フィールドや行の終了位置と次のフィールドや行の開始位置を、データ ファイルを読み取るプログラムに示す方法の 1 つです。詳細については、「フィールド ターミネータと行ターミネータの指定」を参照してください。

フィールド固有のプロンプトの概要

対話的な bcp コマンドに in オプションまたは out オプションが含まれていて、フォーマット ファイル スイッチ (-f) またはデータ形式スイッチ (-n-c-w、または -N) のいずれも含まれていない場合は、ソース テーブルとターゲット テーブルの各列で、上記の属性について順番に問い合わせが行われます。問い合わせが行われる際は、bcp コマンドにより、テーブル列の SQL Server データ型に基づいてそれぞれ既定値が表示されます。すべての問い合わせに対して既定値を受け入れることは、コマンド ラインでネイティブ形式 (-n) を指定するのと同じ結果になります。各プロンプトには、[default] のように既定値が角かっこ付きで表示されます。表示される既定値を受け入れるには、Enter キーを押します。既定値以外を指定するには、プロンプトで新しい値を入力します。

次の例では、bcp コマンドを使用して、HumanResources.myTeam テーブルから myTeam.txt ファイルに、データを対話的に一括エクスポートします。このテーブルを作成しないと、例を実行できません。テーブルおよびテーブルの作成方法の詳細については、「HumanResources.myTeam テーブルの作成」を参照してください。

コマンドでフォーマット ファイルもデータ型も指定しないと、bcp からデータ形式情報が要求されます。Microsoft Windows コマンド プロンプトで、次のように入力します。

bcp AdventureWorks2008R2.HumanResources.myTeam out myTeam.txt -T

bcp AdventureWorks2008R2.HumanResources.myTeam out myTeam.txt -T

列ごとに、bcp からフィールド固有の値が要求されます。次の例は、テーブルの EmployeeID 列と Name 列のフィールド固有のプロンプトを示しています。また、各列の既定のファイル保存形式 (ネイティブ形式) も示しています。EmployeeID 列と Name 列のプレフィックス長は、それぞれ 0 と 2 です。ここでは、各フィールドのターミネータとして、ユーザーがコンマ (,) を指定します。

Enter the file storage type of field EmployeeID [smallint]:

Enter prefix-length of field EmployeeID [0]:

Enter field terminator [none]:,

Enter the file storage type of field Name [nvarchar]:

Enter prefix length of field Name [2]:

Enter field terminator [none]:,

.

.

.

テーブルの列ごとに、列の順番に従って、同等のプロンプトが (必要に応じて) 表示されます。

XML 以外のフォーマット ファイルでのフィールドごとのデータの格納

すべてのテーブル列の情報を指定すると、bcp コマンドから XML 以外のフォーマット ファイルを生成することを求められます。この生成は省略可能です。このフォーマット ファイルには、プロンプトに応じて指定したフィールドごとの情報が格納されます (上記の例を参照)。フォーマット ファイルを生成することを選択すると、いつでも、そのテーブルからデータをエクスポートしたり、同じような構造のデータを SQL Server にインポートできます。

注意

フォーマット ファイルを使用して、データ ファイルから SQL Server のインスタンスにデータを一括インポートできます。また、形式を再度指定しないで、そのテーブルからデータを一括エクスポートできます。詳細については、「データのインポートまたはエクスポート用のフォーマット ファイル」を参照してください。

次の例では、myFormatFile.fmt という名前の XML 以外のフォーマット ファイルを作成します。

Do you want to save this format information in a file? [Y/n] y

Host filename: [bcp.fmt]myFormatFile.fmt

フォーマット ファイルの既定の名前は bcp.fmt ですが、必要に応じて別のファイル名を指定できます。

注意

文字形式やネイティブ形式など、ファイル保存形式に 1 つのデータ形式を使用するデータ ファイルの場合は、format オプションを使用することで、データをエクスポートまたはインポートしなくても、フォーマット ファイルをすばやく作成できます。この方法は簡単で、XML フォーマット ファイルと XML 以外のフォーマット ファイルのどちらも作成できるという利点があります。詳細については、「フォーマット ファイルの作成」を参照してください。

このセクションの内容

このセクションでは、次のトピックについて説明します。

トピック

データ形式の属性

bcp を使用したファイル ストレージ型の指定

bcp コマンドでのファイル保存形式の指定について説明します。

データ ファイルのプレフィックス長の指定

bcp コマンドでのプレフィックス長の指定について説明します。

bcp を使用したフィールド長の指定

bcp コマンドでのフィールド長の指定について説明します。

フィールド ターミネータと行ターミネータの指定

bcp コマンドでのフィールド ターミネータと行ターミネータの指定について説明します。

文字形式のデータの格納

エクスポートされたデータ ファイルに文字形式のデータが格納される方法について説明します。