文字形式のデータの格納

文字形式のデータが、エクスポート先のデータ ファイルにどのように格納されるのかは、そのデータが MicrosoftSQL Server テーブルにどのように格納されていたのかによって異なります。次に示す 2 つの格納パターンが重要です。

  • SQL Serverchar データ

  • char の格納形式に変換されるその他のデータ型

SQL Server char データの格納パターン

SQL Serverchar データは、常に、定義済みの列の全長でデータ ファイルに格納されます。たとえば、char(10) として定義された列は、その列に格納されているデータの長さにかかわらず、常にデータ ファイル内で 10 文字分の領域を占有します。char データがこのフィールドよりも短い場合、このデータにスペースが余白として付加されます。詳細については、「SET ANSI_PADDING (Transact-SQL)」を参照してください。ただし、varchar 型の場合は、プレフィックスかターミネータのいずれかを選択しない限り、実際の文字数分が格納されます。

char データに変換されたその他のデータ型の格納パターン

文字形式で格納された非文字データのデータ ファイルの場合、このファイルに割り当てられる格納領域のサイズは、次に示すように、フィールド長、プレフィックス長、およびターミネータの組み合わせで決まります。

  • プレフィックス長に 0 を指定し、ターミネータを指定しない場合のフィールドは、フィールド長の値で指定されている長さの固定長フィールドとして扱われます。また、この場合には、bcp ユーティリティにより、フィールド長プロンプトに表示される最大領域が割り当てられます。これは、そのデータ型に対して必要となりうる最大領域です。この処理により、1 つのフィールドの終了位置と次のフィールドの開始位置を決定できるようになります。

  • プレフィックス長に 0 を指定し、ターミネータを 1 つ指定した場合、フィールド長の値は無視されます。フィールドで使用される格納領域のサイズは、データの長さにターミネータを加えた長さです。

    重要な注意事項重要

    プレフィックスとターミネータの両方を指定できるのは、非 XML のフォーマット ファイルだけです。

  • プレフィックス長に 1、2、または 4 を指定した場合、フィールド長の値は無視されます。フィールドで使用される領域のサイズは、フィールド自体の長さと、フィールド プレフィックスの長さ、およびすべてのターミネータを加えた長さです。

上の一覧に示したどの場合においても、後で SQL Server に再読み込みするためのデータ ファイルを作成できます。再読み込み後は、SQL Server によって格納領域が最小限に保たれます。格納領域を最小限に抑えるには、既定のファイル格納型と既定のフィールド長と共に長さのプレフィックス文字を使用します。

以下の例は、データが char 形式で格納された場合のフィールド長、プレフィックス長、およびターミネータの相互関係を示しています。プレフィックス長の値を指定している場合は、プレフィックスを P で表します。ターミネータを指定している場合は、ターミネータを T で表します。省略記号 (...) は、各フィールドでそのパターンが繰り返されることを示します。

SQL Server char データの格納パターンの例は次のとおりです。

注意注意

char データは、常に全長で格納されます (1 つ以上のスペース " " パディングとして付加されます)。

テーブル スキーマは t1 (c1 char(8)) です。この例では、5 文字の値を想定しています (Hello で表しています)。この値は、8 文字分の長さのフィールドに格納されています。例に示したデータ フィールドでは、どちらの場合も常に 3 個のスペースが 5 文字の Hello 値に付加されなければなりません。付加されたスペースは、3 個のドット (∙∙∙) で表しています。

 

プレフィックス長 = 0

プレフィックス長 = 1、2、または 4

ターミネータなし

Hello∙∙∙Hello∙∙∙...

PHello∙∙∙PHello∙∙∙...

ターミネータあり

Hello∙∙∙THello∙∙∙T...

PHello∙∙∙TPHello∙∙∙T...

注意注意
この例は、非 XML のフォーマット ファイルのみに当てはまります。

char 形式の格納に変換された場合の非文字データ型の格納パターンの例

テーブル スキーマは t1 (c1 int) です。また、各行に 999 という値が設定されています。

注意注意

char 格納形式に変換され、プレフィックス長が 1、2、または 4 であるかフィールド ターミネータのあるデータについては、データ値にスペースを付加する必要がありません。

 

プレフィックス長 = 0

プレフィックス長 = 1、2、または 4

ターミネータなし

999∙∙999∙∙...

P999P999...

ターミネータあり

999T999T...

P999TP999T...

注意注意
この例は、非 XML のフォーマット ファイルのみに当てはまります。
注意注意

プレフィックス長もターミネータも指定しない場合、整数値が格納され 12 バイトの領域が占有されます。このとき、最後の 9 バイトにはスペース文字が格納されます。