以前のバージョンの SQL Server からのネイティブ形式データおよび文字形式データのインポート

bcp を使用して Microsoft SQL Server 2000 以前のバージョンからネイティブ形式データおよび文字形式データをインポートするには、-V スイッチを使用します。Microsoft SQL Server 2005 では、-V スイッチを指定すると、以前のバージョンの Microsoft SQL Server のデータ型が使用されます。データ ファイルの形式も以前のバージョンと同じものが使用されます。

ms191212.note(ja-jp,SQL.90).gifメモ :
-V スイッチは、Microsoft SQL Server 7.0 で使用される -6 スイッチの機能が拡張されたものです。-6 を使用することは、-V60 または -V65 を使用することと同じです。SQL Server では -6 スイッチを依然としてサポートしていますが、推奨はされません。したがって、-V を使用することをお勧めします。

データ ファイルが SQL Server の以前のどのバージョンのものであるかを指定するには、次のように -V スイッチを使用します。

SQL Server のバージョン 修飾子

Microsoft SQL Server 6.0

-V60

Microsoft SQL Server 6.5

-V65

SQL Server 7.0

-V70

SQL Server 2000

-V80

SQL Server 2005 のデータ型について

SQL Server 2005 では、いくつかの新しい型に対するサポートが追加されました。SQL Server 2005 から SQL Server 2000 以前のバージョンに新しいデータ型をインポートする場合は、古い bcp クライアントで読み取ることが可能な形式でそのデータ型を格納する必要があります。次の表では、以前のバージョンの SQL Server との互換性を維持するために、SQL Server 2005 の新しいデータ型がどのように変換されるかについて要約します。

SQL Server 2005 の新しいデータ型 バージョン 6x の互換性のあるデータ型 バージョン 70 の互換性のあるデータ型 バージョン 80 の互換性のあるデータ型

bigint

decimal

decimal

*

sql_variant

text

nvarchar(4000)

*

varchar(max)

text

text

text

nvarchar(max)

ntext

ntext

ntext

varbinary(max)

image

image

image

XML

ntext

ntext

ntext

UDT1

image

image

image

* この型はネイティブでサポートされています。

1 UDT はユーザー定義型を示します。

SQL Server 2005 からのエクスポート

–V80 スイッチを使用して SQL Server 2005 からデータを一括エクスポートする場合、nvarchar(max) 型、varchar(max) 型、varbinary(max) 型のデータ、XML データ、およびネイティブ モードの UDT データは、SQL Server 2005 の既定である 8 バイトのプレフィックスではなく、text 型、image 型、および ntext 型のデータと同様に、4 バイトのプレフィックスと共に格納されます。

SQL Server 7.0 以前のバージョンからのエクスポート

SQL Server 7.0 以前のバージョンからデータを一括エクスポートする場合、次の項目について検討します。

  • SQL Server 7.0、SQL Server 6.5、SQL Server 6.0 のいずれかのバージョンからエクスポートされる bigint 型のデータのストレージ形式は、データ ファイルのデータ形式によって異なります。
    • ネイティブ モードまたは Unicode ネイティブ形式のデータ ファイルでは、bigint 型のデータは decimal(19,0) として格納されます。
    • キャラクタ モードまたは Unicode 文字形式のデータ ファイルでは、bigint 型のデータは、文字または [-]digits の Unicode 文字列 (たとえば、–25688904432) として格納されます。
  • char 型または varchar 型の列が含まれたテーブルでは、SQL Server 6.0 または SQL Server 6.5 のデータをエクスポートする場合、bcp によって 1 バイトのプレフィックスがデータの長さに対応するデータ ファイル フィールドごとに追加されます。numeric 型のデータが含まれたテーブルでは、情報が SQL Server のネイティブ形式でデータ ファイルに書き込まれます。
  • SQL Server 7.0 と SQL Server 2000 では、値 0 は列の長さがゼロであることを表します。

SQL Server 6.5 または 6.0 からのエクスポート

さらに、SQL Server 6.5 または SQL Server 6.0 からデータを一括エクスポートする場合は、次の項目について検討します。

  • SQL Server 6.5 以前のバージョンでは、bcp は、NULL 値を長さの値 0 として表していましたが、現在は NULL 値を長さの値 -1 として格納しています。
  • SQL Server 6.5 以前のバージョンでは NULL 値を許容する bit 型のデータがサポートされていないので、bit 型の列の NULL 値は値 0 として書き込まれます。
  • bcp ユーティリティでは、データが datetime 型または smalldatetime 型の場合、SQL Server 6.0 または SQL Server 6.5 の日付形式が生成されません。日付は常に ODBC の形式で書き込まれます。
  • -V65 スイッチを使用すると、複数の日付変換のサポートに必要なオーバーヘッドが原因で、パフォーマンスに影響を及ぼすことがあります。
  • SQL Server 6.5 以前のバージョンでは、日付値が異なります。詳細については、次のセクションの「日付値のコピー」を参照してください。

日付値のコピー

SQL Server 7.0 以降、bcp では ODBC の一括コピー API が使用されています。したがって、SQL Server 7.0 以降に日付値をインポートするには、bcp で、ODBC の日付形式 (yyyy-mm-dd hh:mm:ss[.f...]) を使用します。

一方、SQL Server 6.5 以前のバージョンの場合、bcp では、DB-Library の一括コピー API と DB-Library の日付形式が使用されます。SQL Server 6.5 以前のバージョンから SQL Server 7.0 以降のバージョンに日付形式をエクスポートするには、-V65 スイッチを使用します。-V65 を指定した場合、bcp コマンドにより、まず ODBC の日付形式を使用してデータ ファイルの日付値の変換が試行されます。この変換が失敗した場合、bcp では、DB-Library の形式を使用して日付値の変換が試行されます。

-V65 が指定された場合でも、bcp コマンドでは、常に datetime 型と smalldatetime 型の値に使用される ODBC の既定の形式を使用して、文字形式のデータ ファイルがエクスポートされます。たとえば、日付 12 Aug 1998 が含まれた datetime 型の列は、文字列 1998-08-12 00:00:00.000 としてデータ ファイルに一括コピーされます。

ms191212.note(ja-jp,SQL.90).gif重要 :
bcp を使用してデータを smalldatetime フィールドにインポートする場合は、秒の値が 00.000 になっていることを確認してください。それ以外の場合、この操作は失敗します。smalldatetime データ型には、最も近い "分" までの値のみが保持されます。この場合、BULK INSERT と INSERT ... SELECT * FROM OPENROWSET(BULK...) は失敗しませんが、秒の値は切り捨てられます。

-V65 スイッチを使用すると、複数の日付変換のサポートに必要なオーバーヘッドが原因で、パフォーマンスに影響を及ぼすことがあります。

参照

概念

データをインポートまたはエクスポートするためのデータ形式

その他の技術情報

bcp ユーティリティ
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
データ型 (Transact-SQL)
SQL Server 2005 データベース エンジンの旧バージョンとの互換性
CAST および CONVERT (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手