文字形式のデータの格納
文字形式のデータが、エクスポート先のデータ ファイルにどのように格納されるのかは、そのデータが Microsoft SQL Server テーブルにどのように格納されていたのかによって異なります。次に示す 2 つの格納パターンが重要です。
SQL Server char データ
char の格納形式に変換されるその他のデータ型
SQL Server char データの格納パターン
SQL Server char データは、常に、定義済みの列の全長でデータ ファイルに格納されます。たとえば、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 バイトにはスペース文字が格納されます。 |