bcp を使用して互換性データ形式を指定する (SQL Server)

対象者:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analyticsアナリティクスプラットフォームシステム(PDW)Microsoft FabricにおけるSQLデータベース

この記事では、データフォーマット属性、フィールド固有のプロンプト、そして bcp ユーティリティの非XML形式ファイルにフィールドごとのデータを保存する方法について説明します。 この情報は、SQL Serverデータを一括エクスポートして別のプログラム(例えば別のデータベースプログラム)にまとめ取り込む際に役立ちます。 ソーステーブルのデフォルトデータ形式(ネイティブ、文字、またはUnicode)は、他のプログラムが期待するデータレイアウトと互換性がない場合があります。 互換性がない場合は、データをエクスポートする際にデータレイアウトを記述しなければなりません。

データのインポートやエクスポートに関するデータフォーマットの詳細については、「 一括インポートまたは一括エクスポートのデータフォーマット」をご覧ください。

BCPデータフォーマット属性

bcpを使って、以下のデータフォーマット属性を通じて各フィールドの構造を指定します。

  • ファイル ストレージ型

    ファイル ストレージ型 は、データ ファイルへのデータの格納方法を記述します。 データをデータファイルにエクスポートすることは、データベースのテーブル形式(ネイティブ形式)、文字表現形式(文字形式)、または暗黙変換をサポートする任意のデータ型としてエクスポートできます。 例えば、 smallintintとしてコピーできます。ユーザー定義のデータ型はベース型としてエクスポートされます。 詳細については、「 BCPを使ってファイルストレージタイプを指定する」をご覧ください。

  • プレフィックス長

    ネイティブ形式のデータをデータ ファイルに一括エクスポートする際に最もコンパクトな形式で格納できるようにするため、bcp では各フィールドの前に、そのフィールドの長さを示す 1 文字以上の文字が付加されます。 このような文字列を、 プレフィックス長文字列と呼びます。 詳細については、「 bcpを使ってデータファイルにプレフィックス長を指定する」をご覧ください。

  • フィールド長

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

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

    文字データフィールドでは、オプションの終端文字を使って、各フィールドの終わり( フィールド終端器を使用)や各行の終わり( 行終端器使用)をマークできます。 ターミネータ文字は、フィールドや行の終了位置と次のフィールドや行の開始位置を、データ ファイルを読み取るプログラムに示す方法の 1 つです。 詳細については、「 フィールドターミネータと行ターミネータを指定する」を参照してください。

分野別プロンプトの概要

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

以下の例では、 bcp を用いて、 HumanResources.myTeam テーブルから myTeam.txt ファイルへインタラクティブにデータを一括エクスポートします。 このテーブルを作成しないと、例を実行できません。 テーブルの詳細や作成方法については、 HumanResources.myTeam サンプルテーブルをご覧ください。

コマンドはフォーマットファイルもデータ型も指定していないため、 bcp データフォーマット情報を求めるプロンプトを出します。 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にインポートする際に使用できます。

フォーマット ファイルを使用すれば、データ ファイルから 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ですが、希望すれば別のファイル名を指定することもできます。

文字やネイティブフォーマットなど単一のデータ形式をファイルストレージ形式に使用するデータファイルの場合、 format オプションを使うことでデータをエクスポートやインポートせずに素早くフォーマットファイルを作成できます。 この方法は簡単で、XML形式ファイルまたは非XML形式のファイルを作成できます。 詳細については、「 BCPでフォーマットファイルを作成」をご覧ください。