bcp を使用して互換性データ形式を指定する (SQL Server)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
この記事では、データ形式属性、フィールド固有のプロンプト、およびその XML 以外のフォーマット ファイルでのフィールドごとのデータの格納について説明します
SQL Serverbcp コマンド。 これらについて理解しておくと、SQL Server データを一括エクポートして別のプログラム (別のデータベース プログラムなど) に一括インポートする場合に役立ちます。 ソース テーブルの既定のデータ形式 (ネイティブ、文字、または Unicode) が、他のプログラムで想定されているデータ レイアウトと互換性がない場合があります。互換性がない場合はデータをエクスポートするときに、データ レイアウトを記述する必要があります。
Note
データをインポートまたはエクスポートするためのデータ形式に詳しくない場合は、「一括インポートまたは一括エクスポートのデータ形式 (SQL Server)」を参照してください。
bcp データ形式の属性
bcp コマンドにより、次のデータ形式属性に関して、データ ファイル内の各フィールドの構造を指定できます。
ファイル ストレージ型
ファイル ストレージ型 は、データ ファイルへのデータの格納方法を記述します。 データ ファイルには、そのデータベース テーブルの型 (ネイティブ形式)、文字表現 (文字書式)、または暗黙的な型変換がサポートされているデータ型のいずれかとしてデータをエクスポートできます。暗黙的な型変換では、たとえば、smallint は int としてコピーされます。ユーザー定義のデータ型はその基本データ型としてエクスポートされます。 詳細については、「bcp を使用したファイル ストレージ型の指定 (SQL Server)」を参照してください。
プレフィックス長
bcp コマンドでは、ネイティブ形式のデータをデータ ファイルに一括エクスポートするためのファイル ストレージが最も少なくなるように、各フィールドの前にそのフィールドの長さを 1 文字以上の文字列で指定します。 このような文字列を、 プレフィックス長文字列と呼びます。 詳細については、「bcp を使用したデータ ファイルのプレフィックス長の指定 (SQL Server)」を参照してください。
フィールド長
フィールド長は、文字形式でデータを表現するために必要な文字の最大数を示します。 データがネイティブ形式で格納される場合、フィールド長は既にわかっています。 詳細については、「bcp を使用したフィールド長の指定 (SQL Server)」を参照してください。
フィールド ターミネータ
文字列データ フィールドでは、省略可能なターミネータ文字を使用して、データ ファイルの各フィールドの末尾 ( フィールド ターミネータを使用) と各行の末尾 ( 行ターミネータを使用) を示すことができます。 ターミネータ文字は、フィールドや行の終了位置と次のフィールドや行の開始位置を、データ ファイルを読み取るプログラムに示す方法の 1 つです。 詳細については、「フィールド ターミネータと行ターミネータの指定 (SQL Server)」を参照してください。
フィールド固有のプロンプトの概要
対話的な bcp コマンドに in オプションまたは out オプションが含まれていて、フォーマット ファイル スイッチ (-f) またはデータ形式スイッチ (-n、-c、-w、または -N) がいずれも含まれていない場合は、ソース テーブルとターゲット テーブルの各列で、上記の属性について順番に問い合わせが行われます。 問い合わせが行われる際は、bcp コマンドにより、テーブル列の SQL Server データ型に基づいてそれぞれ既定値が表示されます。 すべての問い合わせに対して既定値を受け入れることは、コマンド ラインでネイティブ形式 (-n) を指定するのと同じ結果になります。 各プロンプトには、[default] のように既定値が角かっこ付きで表示されます。 表示される既定値を受け入れるには、Enter キーを押します。 既定値以外を指定するには、プロンプトで新しい値を入力します。
例
次の例では、 bcp コマンドを使用して、 HumanResources.myTeam
テーブルから myTeam.txt
ファイルに、データを対話的に一括エクスポートします。 このテーブルを作成しないと、例を実行できません。 テーブルの詳細とテーブルを作成する方法については、「HumanResources.myTeam サンプル テーブル (SQL Server)」を参照してください。
コマンドでフォーマット ファイルもデータ型も指定しないと、 bcp からデータ形式情報が要求されます。 Microsoft Windows コマンド プロンプトで、次のように入力します。
bcp AdventureWorks.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 にインポートしたりできます。
Note
フォーマット ファイルを使用すれば、データ ファイルから 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 ですが、必要に応じて別のファイル名を指定できます。
Note
文字形式やネイティブ形式など、ファイル保存形式に 1 つのデータ形式を使用するデータ ファイルの場合は、 format オプションを使用することで、データをエクスポートまたはインポートしなくても、フォーマット ファイルをすばやく作成できます。 この方法は簡単で、XML フォーマット ファイルと XML 以外のフォーマット ファイルのどちらも作成できるという利点があります。 詳細については、「フォーマット ファイルの作成 (SQL Server)」を参照してください。
Related Tasks
関連コンテンツ
なし。