bcp を使用したフィールド長の指定 (SQL Server)
フィールド長は、文字形式でデータを表現するために必要な文字の最大数を示します。 データがネイティブ形式で格納されている場合、フィールド長は既にわかっています。たとえば、int
データ型では 4 バイトになります。 プレフィックスの長さに 0 を指定した場合、 bcp コマンドは、フィールドの長さ、既定のフィールド長、および char
データを含むデータ ファイル内のデータ ストレージに対するフィールド長の影響を求めるメッセージを表示します。
フィールド長を要求する bcp プロンプト
対話型の bcp コマンドで、フォーマット ファイル スイッチ (-f) またはデータ形式スイッチ (-n、-c、-w または -N) のどちらも付けずに in または out オプションを指定すると、次のように各データ フィールドの長さを要求するプロンプトが表示されます。
Enter length of field <field_name> [<default>]:
コンテキスト内でこのプロンプトが表示される例については、「bcp を使用した互換性のためのデータ形式の指定 (SQL Server)」を参照してください。
Note
bcp コマンドですべてのフィールドを対話形式で指定すると、各フィールドへの応答を XML 形式以外のファイルに保存するように要求するプロンプトが表示されます。 XML 以外のフォーマット ファイルについて詳しくは、「XML 以外のフォーマット ファイル (SQL Server)」をご覧ください。
bcp コマンドでフィールド長を要求するプロンプトが表示されるかどうかは、次のさまざまな要素によって決まります。
固定長でないデータ型のコピー時にプレフィックス長を 0 に指定した場合、 bcp によってフィールド長を要求するプロンプトが表示されます。
非文字データを文字データに変換するとき、 bcp によってデータの保存に十分な長さの既定フィールド長が提示されます。
ファイル保存形式が非文字である場合、 bcp コマンドによってフィールド長を要求するプロンプトは表示されません。 データは、Microsoft SQL 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)を参照してください。
Note
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 |
decimal 1 |
* |
numeric 1 |
* |
uniqueidentifier |
16 |
timestamp |
8 |
1 データ型の decimal
と numeric
の詳細については、「 decimal and numeric (Transact-SQL)」を参照してください。
前述のすべての場合に、後で SQL Server に再読み込みするためにデータ ファイルを作成して、保存領域を最小限に抑えるには、既定のファイル ストレージ タイプと既定のフィールド長と共に、フィールド長プレフィックスを使用します。
参照
bcp ユーティリティ
データ型 (Transact-SQL)
フィールド ターミネータと行ターミネータの指定 (SQL Server)
bcp を使用したデータ ファイルのプレフィックス長の指定 (SQL Server)
bcp を使用したファイル ストレージ型の指定 (SQL Server)
一括インポート中の NULL の保持または既定値の使用 (SQL Server)