ネイティブ形式を使用したデータのインポートまたはエクスポート (SQL Server)Use Native Format to Import or Export Data (SQL Server)

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

ネイティブ形式は、拡張文字や 2 バイト文字セット (DBCS) の文字を含まないデータ ファイルを使用して、 SQL ServerSQL Server の複数のインスタンス間でデータを一括転送する場合に推奨します。Native format is recommended when you bulk transfer data between multiple instances of SQL ServerSQL Server using a data file that does not contain any extended/double-byte character set (DBCS) characters.

注意

拡張文字や DBCS 文字を含んだデータ ファイルを使用して SQL ServerSQL Server の複数のインスタンス間でデータを一括転送するには、Unicode ネイティブ形式を使用する必要があります。To bulk transfer data between multiple instances of SQL ServerSQL Server by using a data file that contains extended or DBCS characters, you should use the Unicode native format. 詳細については、「 Unicode ネイティブ形式を使用したデータのインポートまたはエクスポート (SQL Server)」をご覧ください。For more information, see Use Unicode Native Format to Import or Export Data (SQL Server).

ネイティブ形式ではデータベースのネイティブ データ型が維持されます。Native format maintains the native data types of a database. ネイティブ形式は、 SQL ServerSQL Server テーブル間でデータを高速に転送できるようにデザインされています。Native format is intended for high-speed data transfer of data between SQL ServerSQL Server tables. フォーマット ファイルを使用する場合は、転送元と転送先のテーブルは同じである必要はありません。If you use a format file, the source and target tables do not need to be identical. データ転送は、次の 2 つの手順で行われます。The data transfer involves two steps:

  1. 転送元テーブルからデータ ファイルへのデータの一括エクスポートBulk exporting the data from a source table into a data file

  2. データ ファイルから転送先テーブルへのデータの一括インポートBulk importing the data from the data file into the target table

フィードバックをお待ちしております。 この記事の手順やコード例の中で、古い情報や間違っている情報を見つけた場合は、ぜひお知らせください。We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. このページの下部にある [フィードバック] セクション内で [このページ] ボタンをクリックしてください。You can click the This page button in the Feedback section at the bottom of this page. SQL に関するフィードバックのすべての項目に目を通しています (通常は翌日)。We read every item of feedback about SQL, typically the next day. よろしくお願いいたします。Thanks.

同一のテーブル間でネイティブ形式を使用すると、文字形式との間でデータ型の不必要な変換を防ぐことができ、時間と領域を節約できます。The use of native format between identical tables avoids unnecessary conversion of data types to and from character format, saving time and space. ただし、最適な転送速度を実現するために、データの形式設定に関するチェックはほとんど行われません。To achieve the optimum transfer rate, however, few checks are performed regarding data formatting. 読み込まれたデータに関する問題を回避するには、次の制限事項の一覧を参照してください。To prevent problems with the loaded data, see the following restrictions list.

このトピックの内容In this Topic:
制限Restrictions
bcp によるネイティブ形式でのデータ処理のしくみHow bcp Handles Data in Native Format
ネイティブ形式用のコマンド オプションCommand Options for Native Format
テスト条件の例Example Test Conditions

 ● サンプル テーブル ● Sample Table
 ● XML 形式以外のフォーマット ファイルのサンプル ● Sample Non-XML Format File
使用例Examples
 ● bcp とネイティブ形式を使用したデータのエクスポート ● Using bcp and Native Format to Export Data
 ● フォーマット ファイルなしで bcp とネイティブ形式を使用してデータをインポートする方法 ● Using bcp and Native Format to Import Data without a Format File
 ● XML 形式以外のフォーマット ファイルで bcp とネイティブ形式を使用してデータをインポートする方法 ● Using bcp and Native Format to Import Data with a Non-XML Format File
 ● フォーマット ファイルなしで BULK INSERT とネイティブ形式を使用する方法 ● Using BULK INSERT and Native Format without a Format File
 ● XML 以外のフォーマット ファイルで BULK INSERT とネイティブ形式を使用する方法 ● Using BULK INSERT and Native Format with a Non-XML Format File
 ● XML 形式以外のフォーマット ファイルで OPENROWSET とネイティブ形式を使用する方法 ● Using OPENROWSET and Native Format with a Non-XML Format File
関連タスクRelated Tasks

制限Restrictions

データをネイティブ形式で正常にインポートするには、次の条件を満たすようにします。To import data in native format successfully, ensure that:

  • データ ファイルがネイティブ形式です。The data file is in native format.

  • インポート先のテーブルは、(正しい列数、データ型、長さ、NULL 状態などが含まれた) データ ファイルと互換性を持つ必要があります。または、フォーマット ファイルを使用して、各フィールドを対応する各列にマップする必要があります。Either the target table must be compatible with the data file (having the correct number of columns, data type, length, NULL status, and so forth), or you must use a format file to map each field to its corresponding columns.

    注意

    インポート先のテーブルと一致しないファイルからデータをインポートすると、インポート操作が成功する場合もありますが、多くの場合、インポート先のテーブルに挿入されるデータ値が不適切な値になります。If you import data from a file that is mismatched with the target table, the import operation might succeed but the data values inserted into the target table are likely to be incorrect. これは、インポート元のファイルのデータが、インポート先のテーブルの形式を使用して解釈されるためです。This is because the data from the file is interpreted by using the format of the target table. そのため、インポート先のテーブルと一致しない場合には、不適切な値が挿入されることになります。Therefore, any mismatch results in the insertion of incorrect values. ただし、このような不一致が原因で、データベース内で論理的または物理的に不一致が発生することはありません。However, under no circumstances can such a mismatch cause logical or physical inconsistencies in the database.

    フォーマット ファイルの使用方法については、「データのインポートまたはエクスポート用のフォーマット ファイル (SQL Server)」を参照してください。For information on using format files, see Format Files for Importing or Exporting Data (SQL Server).

インポートが正常な場合、インポート先のテーブルは破損しません。A successful import will not corrupt the target table.

bcp によるネイティブ形式でのデータ処理のしくみHow bcp Handles Data in Native Format

ここでは、 bcp ユーティリティによるネイティブ形式でのデータのエクスポートとインポートのしくみについて、特別な考慮事項を説明します。This section discusses special considerations for how the bcp utility exports and imports data in native format.

  • 非文字データNoncharacter data

    bcp ユーティリティ では、 SQL ServerSQL Server 内部バイナリ データ形式を使用して、非文字データをテーブルからデータ ファイルに書き込みます。The bcp utility uses the SQL ServerSQL Server internal binary data format to write noncharacter data from a table to a data file.

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

    char または varchar の各フィールドの先頭に、 bcp ユーティリティによってプレフィックス長が追加されます。At the beginning of each char or varchar field, bcp adds the prefix length.

    重要

    ネイティブ モードを使用すると、既定では、 bcp ユーティリティ は、文字をデータ ファイルにコピーする前に、それらの文字を SQL ServerSQL Server 文字から OEM 文字に変換します。When native mode is used, by default, the bcp utility converts characters from SQL ServerSQL Server to OEM characters before it copies them to a data file. bcp ユーティリティ では、データ ファイルの文字を SQL ServerSQL Server テーブルに一括インポートする前に、それらの文字を ANSI 文字に変換します。The bcp utility converts characters from a data file to ANSI characters before it bulk imports them into a SQL ServerSQL Server table. このような変換が行われている間、拡張文字のデータが失われる場合があります。During these conversions, extended character data can be lost. 拡張文字については、Unicode ネイティブ形式を使用するか、コード ページを指定します。For extended characters, either use Unicode native format or specify a code page.

  • sql_variant データ型sql_variant data

    sql_variant データが SQLVARIANT としてネイティブ形式のデータ ファイルに格納されている場合、そのデータのすべての特性が保持されます。If sql_variant data is stored as a SQLVARIANT in a native-format data file, the data maintains all of its characteristics. 各データ値のデータ型を記録するメタデータが、そのデータ値と一緒に格納されます。The metadata that records the data type of each data value is stored along with the data value. このメタデータを使用して、インポート先の sql_variant 列に同じデータ型でデータ値を再作成します。This metadata is used to re-create the data value with the same data type in a destination sql_variant column.

    インポート先の列のデータ型が sql_variantでない場合、各データ値は、暗黙的なデータ変換の通常の規則に従ってインポート先の列のデータ型に変換されます。If the data type of the destination column is not sql_variant, each data value is converted to the data type of the destination column, following the normal rules of implicit data conversion. データ変換中にエラーが発生すると、現在のバッチがロールバックされます。If an error occurs during data conversion, the current batch is rolled back. sql_variant 列間で転送される char 値と varchar 値で、コード ページの変換問題が生じている可能性があります。Any char and varchar values that are transferred between sql_variant columns may have code page conversion issues.

    詳細については、「データ型の変換 (データベース エンジン)」を参照してください。For more information about data conversion, see Data Type Conversion (Database Engine).

ネイティブ形式用のコマンド オプションCommand Options for Native Format

ネイティブ形式のデータは、bcpBULK INSERT、または INSERT ...SELECT * FROM OPENROWSET(BULK...) を使用してテーブルにインポートできますbcp コマンドまたは BULK INSERT ステートメントの場合は、ステートメントでデータ形式を指定できます。You can import native format data into a table using bcp, BULK INSERT or INSERT ... SELECT * FROM OPENROWSET(BULK...). For a bcp command or BULK INSERT statement, you can specify the data format in the statement. INSERT ...SELECT * FROM OPENROWSET(BULK...) ステートメントの場合は、フォーマット ファイルでデータ形式を指定する必要があります。For an INSERT ... SELECT * FROM OPENROWSET(BULK...) statement, you must specify the data format in a format file.

ネイティブ形式は、次のコマンド オプションでサポートされています。Native format is supported by the following command options:

コマンドCommand オプションOption [説明]Description
bcpbcp -n-n bcp ユーティリティで、ネイティブ データ型のデータが使用されます。*Causes the bcp utility to use the native data types of the data.*
BULK INSERTBULK INSERT DATAFILETYPE ='native'DATAFILETYPE ='native' ネイティブ データ型またはワイド ネイティブ データ型のデータが使用されます。Uses the native or wide native data types of the data. フォーマット ファイルでデータ型を指定している場合、DATAFILETYPE は必要ありません。Note that DATAFILETYPE is not needed if a format file specifies the data types.
OPENROWSETOPENROWSET なしN/A フォーマット ファイルを使用する必要がありますMust use a format file

** ネイティブ ( -n) データを、以前のバージョンの SQL ServerSQL Server クライアントと互換性のある形式のテーブルに読み込むには、 -V スイッチを使用します。*To load native (-n) data to a format compatible with earlier versions of SQL ServerSQL Server clients, use the -V switch. 詳細については、「 以前のバージョンの SQL Server からのネイティブ形式データおよび文字形式データのインポート」をご覧ください。For more information, see Import Native and Character Format Data from Earlier Versions of SQL Server.

注意

また、フォーマット ファイルでフィールドごとに形式を指定することもできます。Alternatively, you can specify formatting on a per-field basis in a format file. 詳細については、「 データのインポートまたはエクスポート用のフォーマット ファイル (SQL Server)」を参照してください。For more information, see Format Files for Importing or Exporting Data (SQL Server).

テスト条件の例Example Test Conditions

このトピックの例は、以下に定義されたテーブルとフォーマット ファイルに基づいています。The examples in this topic are based on the table, and format file defined below.

サンプル テーブルSample Table

次のスクリプトは、 myNative という名前のテーブルのテスト データベースを作成し、テーブルにいくつかの初期値を設定します。The script below creates a test database, a table named myNative and populates the table with some initial values. Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS) で次の Transact-SQL を実行します。Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myNative ( 
   PersonID smallint NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date,
   AnnualSalary money
   );

-- Populate table
INSERT TestDatabase.dbo.myNative
VALUES 
(1, 'Anthony', 'Grosse', '1980-02-23', 65000.00),
(2, 'Alica', 'Fatnowna', '1963-11-14', 45000.00),
(3, 'Stella', 'Rossenhain', '1992-03-02', 120000.00);

-- Review Data
SELECT * FROM TestDatabase.dbo.myNative;

XML 形式以外のフォーマット ファイルのサンプルSample Non-XML Format File

SQL Server は、非 XML 形式と XML 形式の 2 種類のフォーマット ファイルをサポートしています。SQL Server support two types of format file: non-XML format and XML format. XML 以外のフォーマットとは、以前のバージョンの SQL Server でサポートされる従来のフォーマットです。The non-XML format is the original format that is supported by earlier versions of SQL Server. 詳細については、「 XML 以外のフォーマット ファイル (SQL Server) 」を参照してください。Please review Non-XML Format Files (SQL Server) for detailed information. 次のコマンドでは、 bcp ユーティリティ を使用し、 myNative.fmtのスキーマに基づいて XML 以外のフォーマット ファイル myNativeを生成します。The following command will use the bcp utility to generate a non-xml format file, myNative.fmt, based on the schema of myNative. bcp コマンドを使用してフォーマット ファイルを作成するには、 format 引数を指定し、データ ファイルのパスの代わりに nul を使用します。To use a bcp command to create a format file, specify the format argument and use nul instead of a data-file path. format オプションには、次に示す -f オプションが必要です。The format option also requires the -f option. さらに、この例では、修飾子 c を使用して文字データを指定し、 T を使用して統合セキュリティによる信頼関係接続を指定します。In addition, for this example, the qualifier c is used to specify character data, and T is used to specify a trusted connection using integrated security. コマンド プロンプトで、次のコマンドを入力します。At a command prompt, enter the following commands:

bcp TestDatabase.dbo.myNative format nul -f D:\BCP\myNative.fmt -T -n 

REM Review file
Notepad D:\BCP\myNative.fmt

重要

XML 以外のフォーマット ファイルは、キャリッジ リターン\ライン フィードで終わるようにします。Ensure your non-XML format file ends with a carriage return\line feed. そうしないと、次のエラー メッセージが発生する可能性があります。Otherwise you will likely receive the following error message:

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

使用例Examples

次の例では、上記で作成したデータベースとフォーマット ファイルを使用します。The examples below use the database, and format files created above.

bcp とネイティブ形式を使用したデータのエクスポートUsing bcp and Native Format to Export Data

-n スイッチと OUT コマンドです。-n switch and OUT command. 注: この例で作成するデータ ファイルをその後のすべての例で使用します。Note: the data file created in this example will be used in all subsequent examples. コマンド プロンプトで、次のコマンドを入力します。At a command prompt, enter the following commands:

bcp TestDatabase.dbo.myNative OUT D:\BCP\myNative.bcp -T -n

REM Review results
NOTEPAD D:\BCP\myNative.bcp

フォーマット ファイルなしで bcp とネイティブ形式を使用してデータをインポートする方法Using bcp and Native Format to Import Data without a Format File

-n スイッチと IN コマンドです。-n switch and IN command. コマンド プロンプトで、次のコマンドを入力します。At a command prompt, enter the following commands:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNative;"

REM Import data
bcp TestDatabase.dbo.myNative IN D:\BCP\myNative.bcp -T -n

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNative;"

XML 形式以外のフォーマット ファイルで bcp とネイティブ形式を使用してデータをインポートする方法Using bcp and Native Format to Import Data with a Non-XML Format File

-n および -f スイッチと IN コマンドです。-n and -f switches and IN command. コマンド プロンプトで、次のコマンドを入力します。At a command prompt, enter the following commands:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNative;"

REM Import data
bcp TestDatabase.dbo.myNative IN D:\BCP\myNative.bcp -f D:\BCP\myNative.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNative;"

フォーマット ファイルなしで BULK INSERT とネイティブ形式を使用する方法Using BULK INSERT and Native Format without a Format File

DATAFILETYPE 引数です。DATAFILETYPE argument. Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS) で次の Transact-SQL を実行します。Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
BULK INSERT TestDatabase.dbo.myNative
    FROM 'D:\BCP\myNative.bcp'
    WITH (
        DATAFILETYPE = 'native'
        );

-- review results
SELECT * FROM TestDatabase.dbo.myNative;

XML 以外のフォーマット ファイルで BULK INSERT とネイティブ形式を使用する方法Using BULK INSERT and Native Format with a Non-XML Format File

FORMATFILE 引数。FORMATFILE argument. Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS) で次の Transact-SQL を実行します。Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
BULK INSERT TestDatabase.dbo.myNative
   FROM 'D:\BCP\myNative.bcp'
   WITH (
        FORMATFILE = 'D:\BCP\myNative.fmt'
        );

-- review results
SELECT * FROM TestDatabase.dbo.myNative;

XML 形式以外のフォーマット ファイルで OPENROWSET とネイティブ形式を使用する方法Using OPENROWSET and Native Format with a Non-XML Format File

FORMATFILE 引数。FORMATFILE argument. Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS) で次の Transact-SQL を実行します。Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myNative;  -- for testing
INSERT INTO TestDatabase.dbo.myNative
    SELECT *
    FROM OPENROWSET (
        BULK 'D:\BCP\myNative.bcp', 
        FORMATFILE = 'D:\BCP\myNative.fmt'  
        ) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myNative;

関連タスクRelated Tasks

一括インポートまたは一括エクスポートのデータ形式を使用するにはTo use data formats for bulk import or bulk export

参照See Also

bcp Utility bcp Utility
BULK INSERT (Transact-SQL) BULK INSERT (Transact-SQL)
データ型 (Transact-SQL) Data Types (Transact-SQL)
sql_variant (Transact-SQL) sql_variant (Transact-SQL)
以前のバージョンの SQL Server からのネイティブ形式データおよび文字形式データのインポート Import Native and Character Format Data from Earlier Versions of SQL Server
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Unicode ネイティブ形式を使用したデータのインポートまたはエクスポート (SQL Server)Use Unicode Native Format to Import or Export Data (SQL Server)