データ ファイルのプレフィックス長の指定

bcp コマンドでは、ネイティブ形式のデータをデータ ファイルに一括エクスポートするためのファイル ストレージが最も少なくなるように、各フィールドの前にそのフィールドの長さを 1 文字以上の文字列で指定します。このような文字列を、プレフィックス長文字列と呼びます。

プレフィックス長の bcp プロンプト

対話的な bcp コマンドに in オプションまたは out オプションが含まれていて、フォーマット ファイル スイッチ (-f) またはデータ形式スイッチ (-n-c-w、または -N) のいずれも含まれていない場合は、次のように各データ フィールドのプレフィックス長が要求されます。

Enter prefix length of field <field_name> [<default>]:

0 を指定すると、フィールドの長さ (文字データ型の場合) またはフィールド ターミネータ (文字以外のネイティブ型の場合) のいずれかが、bcp によって要求されます。コンテキスト内でこのプロンプトが表示される例については、「bcp を使用した互換性のためのデータ形式の指定」を参照してください。

注意

bcp コマンドですべてのフィールドを対話形式で指定すると、各フィールドへの応答を XML 形式以外のフォーマット ファイルに保存するように要求するプロンプトが表示されます。XML 以外のフォーマット ファイルの詳細については、「XML 以外のフォーマット ファイルについて」を参照してください。

プレフィックス長の概要

フィールドのプレフィックス長を格納するには、フィールドの最大長を表すのに十分なバイト数が必要です。必要なバイト数は、ファイル ストレージの型、列の NULL 値許容属性、およびデータがネイティブ形式または文字形式でデータ ファイルに格納されるかどうかによって異なります。たとえば、text データ型または image データ型では、フィールド長を格納するために 4 文字のプレフィックス文字列が必要ですが、varchar データ型で必要なのは 2 文字です。データ ファイルでは、このようなプレフィックス長文字列は、SQL Server の内部バイナリ データ形式で格納されます。

重要な注意事項重要

ネイティブ形式を使用するときは、フィールド ターミネータではなくプレフィックス長を使用します。ネイティブ形式のデータ ファイルは SQL Server の内部バイナリ データ形式で格納されるので、ネイティブ形式のデータがターミネータと競合することがあります。

一括エクスポートのプレフィックス長

注意

フィールドをエクスポートするときにプレフィックス長のプロンプトに表示される既定値は、フィールドの最も効率的なプレフィックス長を示します。

NULL 値は空のフィールドとして表現されます。フィールドが空 (NULL) であることを示すには、フィールド プレフィックスに値 -1 を含めます。つまり、少なくとも 1 バイトが必要です。SQL Server テーブル列で NULL 値を許可する場合は、ファイル ストレージの型に応じて、1 以上のプレフィックス長が必要になります。

データを一括エクスポートし、ネイティブ データ型または文字形式のいずれかで格納する場合は、次の表に示すプレフィックス長を使用します。

SQL Server

データ型

ネイティブ形式

NULL 以外

ネイティブ形式

NULL

文字形式

NULL 以外

文字形式

NULL

char

2

2

2

2

varchar

2

2

2

2

nchar

2

2

2

2

nvarchar

2

2

2

2

text1

4

4

4

4

ntext1

4

4

4

4

binary

2

2

2

2

varbinary

2

2

2

2

image1

4

4

4

4

datetime

0

1

0

1

smalldatetime

0

1

0

1

decimal

1

1

1

1

numeric

1

1

1

1

float

0

1

0

1

real

0

1

0

1

int

0

1

0

1

bigint

0

1

0

1

smallint

0

1

0

1

tinyint

0

1

0

1

money

0

1

0

1

smallmoney

0

1

0

1

bit

0

1

0

1

uniqueidentifier

1

1

0

1

timestamp

1

1

1

1

varchar(max)

8

8

8

8

varbinary(max)

8

8

8

8

UDT (ユーザー定義データ型)

8

8

8

8

XML

8

8

8

8

1 ntext、text、および image の各データ型は、今後のバージョンの SQL Server では廃止される予定です。新しい開発作業ではこれらのデータ型の使用を避け、現在このデータ型を使用しているアプリケーションは変更を検討してください。代わりに、nvarchar(max)、varchar(max)、および varbinary(max) を使用してください。詳細については、「大きな値のデータ型の使用」を参照してください。

詳細については、「文字形式のデータの格納」を参照してください。

一括インポートのプレフィックス長

データが一括インポートされるときは、プレフィックス長はデータ ファイルが作成されたときに指定された値になります。bcp コマンドでデータ ファイルが作成されなかった場合、プレフィックス長文字列が存在しない場合があります。この場合は、プレフィックス長に 0 を指定します。

注意

bcp を使用して、作成されなかったデータ ファイルのプレフィックス長を指定するには、このトピックの「一括エクスポートのプレフィックス長」に記載した長さを使用してください。