ネイティブ形式を使用したデータのインポートまたはエクスポート

ネイティブ形式は、拡張文字や 2 バイト文字セット (DBCS) の文字を含まないデータ ファイルを使用して、Microsoft SQL Server の複数のインスタンス間でデータを一括転送する場合に推奨します。

注意

拡張文字や DBCS 文字を含んだデータ ファイルを使用して SQL Server の複数のインスタンス間でデータを一括転送するには、Unicode ネイティブ形式を使用する必要があります。詳細については、「Unicode ネイティブ形式を使用したデータのインポートまたはエクスポート」を参照してください。

ネイティブ形式ではデータベースのネイティブ データ型が維持されます。ネイティブ形式は、SQL Server テーブル間でデータを高速に転送できるようにデザインされています。フォーマット ファイルを使用する場合は、転送元と転送先のテーブルは同じである必要はありません。データ転送は、次の 2 つの手順で行われます。

  1. 転送元テーブルからデータ ファイルへのデータの一括エクスポート

  2. データ ファイルから転送先テーブルへのデータの一括インポート

同一のテーブル間でネイティブ形式を使用すると、文字形式との間でデータ型の不必要な変換を防ぐことができ、時間と領域を節約できます。ただし、最適な転送速度を実現するために、データの形式設定に関するチェックはほとんど行われません。読み込まれたデータに関する問題を回避するには、次の制限事項の一覧を参照してください。

制限

データをネイティブ形式で正常にインポートするには、次の条件を満たすようにします。

  • データ ファイルがネイティブ形式です。

  • インポート先のテーブルは、(正しい列数、データ型、長さ、NULL 状態などが含まれた) データ ファイルと互換性を持つ必要があります。または、フォーマット ファイルを使用して、各フィールドを対応する各列にマップする必要があります。

    注意

    インポート先のテーブルと一致しないファイルからデータをインポートすると、インポート操作が成功する場合もありますが、多くの場合、インポート先のテーブルに挿入されるデータ値が不適切な値になります。これは、インポート元のファイルのデータが、インポート先のテーブルの形式を使用して解釈されるためです。そのため、インポート先のテーブルと一致しない場合には、不適切な値が挿入されることになります。ただし、このような不一致が原因で、データベース内で論理的または物理的に不一致が発生することはありません。

    フォーマット ファイルの使用の詳細については、「データのインポートまたはエクスポート用のフォーマット ファイル」を参照してください。

インポートが正常な場合、インポート先のテーブルは破損しません。

bcp によるネイティブ形式でのデータ処理のしくみ

ここでは、bcp ユーティリティによるネイティブ形式でのデータのエクスポートとインポートのしくみについて、特別な考慮事項を説明します。

  • 非文字データ

    bcp ユーティリティでは、SQL Server 内部バイナリ データ形式を使用して、非文字データをテーブルからデータ ファイルに書き込みます。

  • char データまたは varchar データ

    char または varchar の各フィールドの先頭に、bcp ユーティリティによってプレフィックス長が追加されます。

    重要な注意事項重要

    ネイティブ モードを使用すると、bcp ユーティリティは、既定では、文字をデータ ファイルにコピーする前に、それらの文字を SQL Server 文字から OEM 文字に変換します。bcp ユーティリティでは、データ ファイルの文字を SQL Server テーブルに一括インポートする前に、それらの文字を ANSI 文字に変換します。このような変換が行われている間、拡張文字のデータが失われる場合があります。拡張文字については、Unicode ネイティブ形式を使用するか、コード ページを指定します。コード ページの使用に関する詳細については、「異なる照合順序間でのデータのコピー」を参照してください。

  • sql_variant データ

    sql_variant データが SQLVARIANT としてネイティブ形式のデータ ファイルに格納されている場合、そのデータのすべての特性が保持されます。各データ値のデータ型を記録するメタデータが、そのデータ値と一緒に格納されます。このメタデータを使用して、インポート先の sql_variant 列に同じデータ型でデータ値を再作成します。

    インポート先の列のデータ型が sql_variant でない場合、各データ値は、暗黙的なデータ変換の通常の規則に従ってインポート先の列のデータ型に変換されます。データ変換中にエラーが発生すると、現在のバッチがロールバックされます。sql_variant 列間で転送される char 値と varchar 値で、コード ページの変換問題が生じている可能性があります。詳細については、「異なる照合順序間でのデータのコピー」を参照してください。

    データ変換の詳細については、「データ型の変換 (データベース エンジン)」を参照してください。

ネイティブ形式用のコマンド オプション

ネイティブ形式のデータは、bcp、BULK INSERT、または INSERT ...SELECT * FROM OPENROWSET(BULK...) を使用してテーブルにインポートできます。bcp コマンドまたは BULK INSERT ステートメントの場合は、コマンド ラインでデータ形式を指定できます。INSERT ...SELECT * FROM OPENROWSET(BULK...) ステートメントの場合、フォーマット ファイルにデータ形式を指定する必要があります。

ネイティブ形式は、次のコマンド ライン オプションでサポートされています。

コマンド

オプション

説明

bcp

-n

bcp ユーティリティで、ネイティブ データ型のデータが使用されます。1

BULK INSERT

DATAFILETYPE ='native'

ネイティブ データ型またはワイド ネイティブ データ型のデータが使用されます。フォーマット ファイルでデータ型を指定している場合、DATAFILETYPE は必要ありません。

1 ネイティブ (-n) データを、以前のバージョンの SQL Server クライアントと互換性のある形式のテーブルに読み込むには、-V スイッチを使用します。詳細については、「以前のバージョンの SQL Server からのネイティブ形式データおよび文字形式データのインポート」を参照してください。

詳細については、「bcp ユーティリティ」、「BULK INSERT (Transact-SQL)」、または「OPENROWSET (Transact-SQL)」を参照してください。

注意

また、フォーマット ファイルでフィールドごとに形式を指定することもできます。詳細については、「データのインポートまたはエクスポート用のフォーマット ファイル」を参照してください。

次の例では、bcp を使用してネイティブ データを一括エクスポートする方法と、BULK INSERT を使用して同じデータを一括インポートする方法を説明します。

サンプル テーブル

次の例を実行するには、dbo スキーマに基づいて、myTestNativeData という名前のテーブルを AdventureWorks サンプル データベース内に作成する必要があります。このテーブルを作成しないと、例を実行できません。SQL Server Management Studio クエリ エディターで、次のコードを実行します。

USE AdventureWorks2008R2;
GO
CREATE TABLE myTestNativeData (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50)
   ); 

USE AdventureWorks2008R2;
GO
CREATE TABLE myTestNativeData (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50)
   ); 

このテーブルを作成し、上記のコードにより生成された内容を表示するには、次のステートメントを実行します。

INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(1,'DataField2','DataField3');
INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(2,'DataField2','DataField3');
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData

INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(1,'DataField2','DataField3');
INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(2,'DataField2','DataField3');
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData

bcp を使用したネイティブ データの一括エクスポート

テーブルからデータ ファイルにデータをエクスポートするには、bcpout オプションと次の修飾子を組み合わせて使用します。

修飾子

説明

-n

ネイティブ データ型を指定します。

-T

bcp ユーティリティが統合セキュリティを使用した信頼関係接続を使用して SQL Server に接続することを指定します。-T を指定しない場合、正常にログインするには、-U および -P を指定する必要があります。

次の例では、ネイティブ形式のデータを myTestNativeData テーブルから myTestNativeData-n.Dat という名前の新しいデータ ファイルに一括エクスポートします。Microsoft Windows コマンド プロンプトで、次のように入力します。

bcp AdventureWorks2008R2..myTestNativeData out C:\myTestNativeData-n.Dat -n -T

bcp AdventureWorks2008R2..myTestNativeData out C:\myTestNativeData-n.Dat -n -T

BULK INSERT を使用したネイティブ データの一括インポート

次の例では、BULK INSERT を使用して、myTestNativeData-n.Dat データ ファイルのデータを myTestNativeData テーブルにインポートします。SQL Server Management Studio クエリ エディターで、次のコードを実行します。

USE AdventureWorks2008R2;
GO
BULK INSERT myTestNativeData 
    FROM 'C:\myTestNativeData-n.Dat' 
   WITH (DATAFILETYPE='native'); 
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData
GO

USE AdventureWorks2008R2;
GO
BULK INSERT myTestNativeData 
    FROM 'C:\myTestNativeData-n.Dat' 
   WITH (DATAFILETYPE='native'); 
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData
GO