文字形式のデータの格納

文字形式のデータが、エクスポート先のデータ ファイルにどのように格納されるのかは、そのデータが 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 つ指定した場合、フィールド長の値は無視されます。フィールドで使用される格納領域のサイズは、データの長さにターミネータを加えた長さです。
    ms190212.note(ja-jp,SQL.90).gif重要 :
    プレフィックスとターミネータの両方を指定できるのは、非 XML のフォーマット ファイルだけです。
  • プレフィックス長に 1、2、または 4 を指定した場合、フィールド長の値は無視されます。フィールドで使用される領域のサイズは、フィールド自体の長さと、フィールド プレフィックスの長さ、およびすべてのターミネータを加えた長さです。

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

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

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

ms190212.note(ja-jp,SQL.90).gifメモ :
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...

ms190212.note(ja-jp,SQL.90).gifメモ :

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

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

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

ms190212.note(ja-jp,SQL.90).gifメモ :
char 格納形式に変換され、プレフィックス長が 1、2、または 4 であるかフィールド ターミネータのあるデータについては、データ値にスペースを付加する必要がありません。

 

プレフィックス長 = 0

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

ターミネータなし

999∙∙999∙∙...

P999P999...

ターミネータあり

999T999T...

P999TP999T...

ms190212.note(ja-jp,SQL.90).gifメモ :

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

ms190212.note(ja-jp,SQL.90).gifメモ :
プレフィックス長もターミネータも指定しない場合、整数値が格納され 12 バイトの領域が占有されます。このとき、最後の 9 バイトにはスペース文字が格納されます。

参照

概念

bcp を使用したフィールド長の指定
bcp を使用したファイル ストレージ型の指定
データ ファイルのプレフィックス長の指定
フィールド ターミネータと行ターミネータの指定

その他の技術情報

bcp ユーティリティ
データ型 (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 12 月 12 日

追加内容 :
  • プレフィックスとターミネータの両方を指定できるのは、非 XML のフォーマット ファイルだけである点を追加しました。