bcp を使用したフィールド長の指定
フィールド長は、文字形式でデータを表現するために必要な文字の最大数を示します。データがネイティブ形式で格納されている場合、フィールド長は既にわかっています。たとえば、int データ型では 4 バイトになります。プレフィックス長に 0 を指定した場合、bcp コマンドを実行すると、フィールド長、既定のフィールド長、および char データを含むデータ ファイル内のデータ ストレージに対するフィールド長の影響を確認するプロンプトが表示されます。
フィールド長を要求する bcp プロンプト
対話型の bcp コマンドで、フォーマット ファイル スイッチ (-f) またはデータ形式スイッチ (-n、-c、-w、または -N) のどちらも付けずに in または out オプションを指定すると、次のように各データ フィールドの長さを要求するプロンプトが表示されます。
Enter length of field <field_name> [<default>]:
コンテキスト内でこのプロンプトが表示される例については、「bcp を使用した互換性のためのデータ形式の指定」を参照してください。
注意 |
---|
bcp コマンドですべてのフィールドを対話形式で指定すると、各フィールドへの応答を XML 形式以外のファイルに保存するように要求するプロンプトが表示されます。XML 形式以外のファイルの詳細については、「XML 以外のフォーマット ファイルについて」を参照してください。 |
bcp コマンドでフィールド長を要求するプロンプトが表示されるかどうかは、次のさまざまな要素によって決まります。
固定長でないデータ型のコピー時にプレフィックス長を 0 に指定した場合、bcp によってフィールド長を要求するプロンプトが表示されます。
非文字データを文字データに変換するとき、bcp によってデータの保存に十分な長さの既定フィールド長が提示されます。
ファイル保存形式が非文字である場合、bcp コマンドによってフィールド長を要求するプロンプトは表示されません。データは、MicrosoftSQL Server のネイティブ データ表現 (ネイティブ形式) で保存されます。
既定のフィールド長の使用
通常、Microsoft では、bcp によって提示された既定値をフィールド長に使用することをお勧めします。キャラクタ モードのデータ ファイルが作成された場合、既定のフィールド長を使用することによって、データの切り捨てや数値オーバーフロー エラーの発生を防止できます。
不適切なフィールド長を指定すると、問題が発生する場合があります。たとえば、数値データをコピーするときに、そのデータに対して短すぎるフィールド長を指定すると、bcp ユーティリティによってオーバーフロー エラー メッセージが出力され、データはコピーされません。また、datetime データをエクスポートするときに、その文字列に対して 26 バイトよりも短いフィールド長を指定すると、bcp ユーティリティによってデータが切り捨てられ、エラー メッセージも表示されません。
重要 |
---|
既定のサイズ オプションを使用すると、SQL Server は文字列全体を読み取ります。場合によっては、既定のフィールド長を使用すると、"予期しないファイルの終了" エラーが発生することもあります。通常、このエラーは、予期されるフィールドの一部のみがデータ ファイル内にある場合に money および datetime データ型で発生します。たとえば、mm/dd/yy 形式の datetime 値が時刻要素なしで指定された場合、char 形式の datetime 値の長さは、予期される 24 文字よりも短くなります。この種類のエラーを防止するには、フィールド ターミネータまたは固定長データ フィールドを使用するか、既定のフィールド長を別の値に変更します。 |
文字ファイル保存の既定のフィールド長
次の表は、文字ファイル保存形式として保存されるデータの既定のフィールド長を示しています。NULL 値を使用できるデータの長さは、NULL 値を使用できないデータの長さと同じです。
データ型 |
既定の長さ (文字数) |
---|---|
char |
列に対して定義された長さ |
varchar |
列に対して定義された長さ |
nchar |
列に対して定義された長さの 2 倍 |
nvarchar |
列に対して定義された長さの 2 倍 |
Text |
0 |
ntext |
0 |
bit |
1 |
binary |
列に対して定義された長さの 2 倍 + 1 |
varbinary |
列に対して定義された長さの 2 倍 + 1 |
image |
0 |
datetime |
24 |
smalldatetime |
24 |
float |
30 |
real |
30 |
int |
12 |
bigint |
19 |
smallint |
7 |
tinyint |
5 |
money |
30 |
smallmoney |
30 |
decimal |
41* |
numeric |
41* |
uniqueidentifier |
37 |
timestamp |
17 |
varchar(max) |
0 |
varbinary(max) |
0 |
nvarchar(max) |
0 |
UDT |
ユーザー定義型 (UDT) 列の長さ |
XML |
0 |
*decimal および numeric データ型の詳細については、「decimal 型と numeric 型 (Transact-SQL)」を参照してください。
注意 |
---|
tinyint 型の列には、0 ~ 255 の値を入力できます。この範囲の任意の数を表現するために必要な最大文字数は 3 です。これは、100 ~ 255 に相当します。 |
ネイティブ ファイル保存の既定のフィールド長
次の表は、ネイティブ ファイル保存形式として保存されるデータの既定のフィールド長を示しています。NULL 値を使用できるデータの長さは、NULL 値を使用できないデータの長さと同じです。また、文字データは常に文字形式で保存されます。
データ型 |
既定の長さ (文字数) |
---|---|
bit |
1 |
binary |
列に対して定義された長さ |
varbinary |
列に対して定義された長さ |
image |
0 |
datetime |
8 |
smalldatetime |
4 |
float |
8 |
real |
4 |
int |
4 |
bigint |
8 |
smallint |
2 |
tinyint |
1 |
money |
8 |
smallmoney |
4 |
decimal1 |
* |
numeric1 |
* |
uniqueidentifier |
16 |
timestamp |
8 |
1decimal および numeric データ型の詳細については、「decimal 型と numeric 型 (Transact-SQL)」を参照してください。
前述のすべての場合に、後で SQL Server に再読み込みするためにデータ ファイルを作成して、保存領域を最小限に抑えるには、既定のファイル保存形式と既定のフィールド長と共に、フィールド長プレフィックスを使用します。