BULK INSERT (Transact-SQL)BULK INSERT (Transact-SQL)

適用対象:○SQL Server (2008 以降)○Azure SQL Database×Azure SQL Data Warehouse ×Parallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL Server で、ユーザーが指定した形式で、データベース テーブルまたはビューにデータ ファイルをインポートします。Imports a data file into a database table or view in a user-specified format in SQL ServerSQL Server

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax


BULK INSERT   
   [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ]   
      FROM 'data_file'   
     [ WITH   
    (   
   [ [ , ] BATCHSIZE = batch_size ]   
   [ [ , ] CHECK_CONSTRAINTS ]   
   [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]   
   [ [ , ] DATAFILETYPE =   
      { 'char' | 'native'| 'widechar' | 'widenative' } ]   
   [ [ , ] DATASOURCE = 'data_source_name' ]
   [ [ , ] ERRORFILE = 'file_name' ]
   [ [ , ] ERRORFILE_DATASOURCE = 'data_source_name' ]   
   [ [ , ] FIRSTROW = first_row ]   
   [ [ , ] FIRE_TRIGGERS ]   
   [ [ , ] FORMATFILE_DATASOURCE = 'data_source_name' ]
   [ [ , ] KEEPIDENTITY ]   
   [ [ , ] KEEPNULLS ]   
   [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]   
   [ [ , ] LASTROW = last_row ]   
   [ [ , ] MAXERRORS = max_errors ]   
   [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]   
   [ [ , ] ROWS_PER_BATCH = rows_per_batch ]   
   [ [ , ] ROWTERMINATOR = 'row_terminator' ]   
   [ [ , ] TABLOCK ]   

   -- input file format options
   [ [ , ] FORMAT = 'CSV' ]
   [ [ , ] FIELDQUOTE = 'quote_characters']
   [ [ , ] FORMATFILE = 'format_file_path' ]   
   [ [ , ] FIELDTERMINATOR = 'field_terminator' ]   
   [ [ , ] ROWTERMINATOR = 'row_terminator' ]   
    )]   

引数Arguments

database_namedatabase_name
指定のテーブルまたはビューが含まれているデータベース名を指定します。Is the database name in which the specified table or view resides. 指定しない場合、現在のデータベースが使用されます。If not specified, this is the current database.

schema_nameschema_name
テーブルまたはビューのスキーマの名前を指定します。Is the name of the table or view schema. schema_name場合は、一括インポート操作を実行するユーザーの既定のスキーマは、指定したテーブルまたはビューのスキーマは省略します。schema_name is optional if the default schema for the user performing the bulk-import operation is schema of the specified table or view. 場合スキーマが指定されていないと、一括インポート操作を実行するユーザーの既定のスキーマは、指定したテーブルまたはビューから、 SQL ServerSQL Serverエラー メッセージ、および一括インポート操作が取り消されるを返します。If schema is not specified and the default schema of the user performing the bulk-import operation is different from the specified table or view, SQL ServerSQL Server returns an error message, and the bulk-import operation is canceled.

table_nametable_name
データの一括インポート先のテーブル名またはビュー名を指定します。Is the name of the table or view to bulk import data into. 指定できるビューは、すべての列が同じベース テーブルを参照するビューだけです。Only views in which all columns refer to the same base table can be used. ビューにデータの読み込みの制限に関する詳細については、次を参照してください。 INSERT (です。TRANSACT-SQL と #41 です。.For more information about the restrictions for loading data into views, see INSERT (Transact-SQL).

' data_file '' data_file '
指定のテーブルまたはビューにインポートするデータが含まれているデータ ファイルの完全なパスを指定します。Is the full path of the data file that contains data to import into the specified table or view. BULK INSERT を使用して、ディスク (ネットワーク、フロッピー ディスク、ハード ディスクなど) からデータをインポートすることができます。BULK INSERT can import data from a disk (including network, floppy disk, hard disk, and so on).

data_fileをサーバーから有効なパスを指定する必要があります SQL ServerSQL Serverが実行されています。data_file must specify a valid path from the server on which SQL ServerSQL Server is running. 場合data_fileがリモート ファイル、汎用名前付け規則 (UNC) 名を指定します。If data_file is a remote file, specify the Universal Naming Convention (UNC) name. UNC 名の形式\ \ Systemname\ShareName\パス\ FileNameです。A UNC name has the form \\Systemname\ShareName\Path\FileName. たとえば、 \\SystemX\DiskZ\Sales\update.txtのようにします。For example, \\SystemX\DiskZ\Sales\update.txt.
適用対象: SQL Server 2017SQL Server 2017 CTP 1.1.Applies to: SQL Server 2017SQL Server 2017 CTP 1.1.
以降でSQL Server 2017SQL Server 2017CTP1.1、data_file は、Azure blob ストレージにすることができます。Beginning with SQL Server 2017SQL Server 2017 CTP1.1, the data_file can be in Azure blob storage.

' data_source_name ' ' data_source_name '
適用対象: SQL Server 2017SQL Server 2017 CTP 1.1.Applies to: SQL Server 2017SQL Server 2017 CTP 1.1.
名前付きの外部データ ソースがインポートされるファイルの Azure Blob ストレージの場所を指しています。Is a named external data source pointing to the Azure Blob storage location of the file that will be imported. 使用して、外部データ ソースを作成する必要があります、TYPE = BLOB_STORAGEオプションで追加されたSQL Server 2017SQL Server 2017CTP 1.1 です。The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017SQL Server 2017 CTP 1.1. 詳細については、次を参照してください。 CREATE EXTERNAL DATA SOURCEです。For more information, see CREATE EXTERNAL DATA SOURCE.

BATCHSIZE = batch_sizeBATCHSIZE =batch_size
1 つのバッチに含まれている行の数を指定します。Specifies the number of rows in a batch. それぞれのバッチは、1 回のトランザクションでサーバーにコピーされます。Each batch is copied to the server as one transaction. コピーに失敗した場合、 SQL ServerSQL Server では各バッチのトランザクションがコミットまたはロールバックされます。If this fails, SQL ServerSQL Server commits or rolls back the transaction for every batch. 既定では、指定のデータ ファイル内にあるすべてのデータが 1 つのバッチになります。By default, all data in the specified data file is one batch. パフォーマンスに関する考慮事項については、後の「解説」を参照してください。For information about performance considerations, see "Remarks," later in this topic.

CHECK_CONSTRAINTSCHECK_CONSTRAINTS
一括インポート操作中、対象テーブルまたはビューに対するすべての制約を検証します。Specifies that all constraints on the target table or view must be checked during the bulk-import operation. CHECK_CONSTRAINTS オプションを指定しない場合、CHECK 制約および FOREIGN KEY 制約は無視され、操作の後でテーブルの制約は信頼されていないものとしてマークされます。Without the CHECK_CONSTRAINTS option, any CHECK and FOREIGN KEY constraints are ignored, and after the operation, the constraint on the table is marked as not-trusted.

注意

UNIQUE および PRIMARY KEY 制約は常に適用されます。UNIQUE, and PRIMARY KEY constraints are always enforced. NOT NULL 制約で定義された文字型列にインポートする場合、テキスト ファイルに値がなければ BULK INSERT は空白文字列を挿入します。When importing into a character column that is defined with a NOT NULL constraint, BULK INSERT inserts a blank string when there is no value in the text file.

ある時点で、テーブル全体に対する制約を確認する必要があります。At some point, you must examine the constraints on the whole table. 一括インポート操作の実行時にテーブルが空でなかった場合は、制約の再検証を行うと、追加データに CHECK 制約を適用するよりもコストがかかる可能性があります。If the table was non-empty before the bulk-import operation, the cost of revalidating the constraint may exceed the cost of applying CHECK constraints to the incremental data.

入力データに制約違反の行が含まれている場合などは、制約を無効 (既定の動作) にできます。A situation in which you might want constraints disabled (the default behavior) is if the input data contains rows that violate constraints. CHECK 制約を無効になっているには、データをインポートし、使用することができます Transact-SQLTransact-SQLを無効なデータを削除してステートメントです。With CHECK constraints disabled, you can import the data and then use Transact-SQLTransact-SQL statements to remove the invalid data.

注意

MAXERRORS オプションは制約チェックには適用されません。The MAXERRORS option does not apply to constraint checking.

CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }
データ ファイル内のデータのコード ページを指定します。Specifies the code page of the data in the data file. CODEPAGE は、データが含まれている場合にのみ関連するcharvarchar、またはテキスト文字の値よりも大きい列127以下32です。CODEPAGE is relevant only if the data contains char, varchar, or text columns with character values greater than 127 or less than 32.

注意

MicrosoftMicrosoft内の各列の照合順序名を指定することをお勧め、フォーマット ファイルです。 recommends that you specify a collation name for each column in a format file.

CODEPAGE の値CODEPAGE value DescriptionDescription
ACPACP 列のcharvarchar、またはテキストからデータ型を変換、 ANSIANSI / MicrosoftMicrosoft Windows コード ページ (ISO 1252) を SQL ServerSQL Serverコード ページです。Columns of char, varchar, or text data type are converted from the ANSIANSI/ MicrosoftMicrosoft Windows code page (ISO 1252) to the SQL ServerSQL Server code page.
OEM (既定値)OEM (default) 列のcharvarchar、またはテキストシステム OEM コード ページからデータ型を変換、 SQL ServerSQL Serverコード ページです。Columns of char, varchar, or text data type are converted from the system OEM code page to the SQL ServerSQL Server code page.
RAWRAW 1 つのコード ページから別のコード ページへの変換は行われません。このオプションを使用すると、最も高速に操作を完了できます。No conversion from one code page to another occurs; this is the fastest option.
code_pagecode_page 850 など、特定のコード ページ番号を指定します。Specific code page number, for example, 850.

**重要な* \* より前のバージョン SQL Server 2016SQL Server 2016コード ページ 65001 (utf-8 エンコード) をサポートしていません。** Important *\* Versions prior to SQL Server 2016SQL Server 2016 do not support code page 65001 (UTF-8 encoding).

DATAFILETYPE = { 'char' | 'native' | 'widechar' | widenative }DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' }
BULK INSERT で、指定したデータ ファイルの型の値に基づいてインポート操作を実行します。Specifies that BULK INSERT performs the import operation using the specified data-file type value.

DATAFILETYPE の値DATAFILETYPE value すべてのデータが示す形式All data represented in:
char (既定値)char (default) 文字形式。Character format.

詳細については、「文字形式を使用したデータのインポートまたはエクスポート (SQL Server)」をご覧ください。For more information, see Use Character Format to Import or Export Data (SQL Server).
ネイティブnative ネイティブ (データベース) データ型。Native (database) data types. データの一括インポートで、ネイティブ データ ファイルを作成する SQL ServerSQL Serverを使用して、 bcpユーティリティです。Create the native data file by bulk importing data from SQL ServerSQL Server using the bcp utility.

ネイティブ値を使用すると、char 型の値を使用するよりもパフォーマンスが向上します。The native value offers a higher performance alternative to the char value.

詳細については、「ネイティブ形式を使用したデータのインポートまたはエクスポート (SQL Server)」をご覧ください。For more information, see Use Native Format to Import or Export Data (SQL Server).
widecharwidechar Unicode 文字。Unicode characters.

詳細については、「 Unicode 文字形式を使用したデータのインポートまたはエクスポート (SQL Server)」をご覧ください。For more information, see Use Unicode Character Format to Import or Export Data (SQL Server).
widenativewidenative ネイティブ (データベース) データ型では可charvarchar、およびテキスト列、データが Unicode として格納されています。Native (database) data types, except in char, varchar, and text columns, in which data is stored as Unicode. 作成、 widenativeデータ ファイルからデータの一括インポートを SQL ServerSQL Serverを使用して、 bcpユーティリティです。Create the widenative data file by bulk importing data from SQL ServerSQL Server using the bcp utility.

Widenative値に代わるより高いパフォーマンス手段を提供するwidecharです。The widenative value offers a higher performance alternative to widechar. データ ファイルが含まれている場合 ANSIANSI指定文字を拡張widenativeです。If the data file contains ANSIANSI extended characters, specify widenative.

詳細については、「 Unicode ネイティブ形式を使用したデータのインポートまたはエクスポート (SQL Server)」をご覧ください。For more information, see Use Unicode Native Format to Import or Export Data (SQL Server).

ERRORFILE ='file_name'ERRORFILE ='file_name'
形式エラーがあり、OLE DB 行セットに変換できない行を収集するときに使用するファイルを指定します。Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. 該当する行は、データ ファイルからこのエラー ファイルに "そのまま" コピーされます。These rows are copied into this error file from the data file "as is."

このエラー ファイルは、コマンドが実行されたときに作成されます。The error file is created when the command is executed. ファイルが既に存在する場合はエラーが発生し、An error occurs if the file already exists. 拡張子 .ERROR.txt の制御ファイルが作成されます。Additionally, a control file that has the extension .ERROR.txt is created. このファイルにはエラー ファイルの各行の参照と、エラーの診断が含まれています。This references each row in the error file and provides error diagnostics. エラーが修正されるとすぐ、データは読み込み可能になります。As soon as the errors have been corrected, the data can be loaded.
適用対象: SQL Server 2017SQL Server 2017 CTP 1.1.Applies to: SQL Server 2017SQL Server 2017 CTP 1.1. 以降でSQL Server 2017SQL Server 2017error_file_path Azure blob ストレージにすることができます。Beginning with SQL Server 2017SQL Server 2017, the error_file_path can be in Azure blob storage.

' errorfile_data_source_name''errorfile_data_source_name'
適用対象: SQL Server 2017SQL Server 2017 CTP 1.1.Applies to: SQL Server 2017SQL Server 2017 CTP 1.1. 名前付きの外部データ ソースは、インポート中に見つかったエラーを格納するエラー ファイルの Azure Blob ストレージの場所を指しています。Is a named external data source pointing to the Azure Blob storage location of the error file that will contain errors found during the import. 使用して、外部データ ソースを作成する必要があります、TYPE = BLOB_STORAGEオプションで追加されたSQL Server 2017SQL Server 2017CTP 1.1 です。The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017SQL Server 2017 CTP 1.1. 詳細については、次を参照してください。 CREATE EXTERNAL DATA SOURCEです。For more information, see CREATE EXTERNAL DATA SOURCE.

FIRSTROW = first_rowFIRSTROW =first_row
読み込み開始行の行番号を指定します。Specifies the number of the first row to load. 既定値は、指定されたデータ ファイルの先頭行です。The default is the first row in the specified data file. FIRSTROW は 1 から始まります。FIRSTROW is 1-based.

注意

FIRSTROW 属性は、列ヘッダーのスキップを目的としたものではありません。The FIRSTROW attribute is not intended to skip column headers. ヘッダーのスキップは、BULK INSERT ステートメントではサポートされません。Skipping headers is not supported by the BULK INSERT statement. 行をスキップした場合、 SQL Server データベース エンジンSQL Server Database Engineではフィールド ターミネータのみが調べられます。スキップした行のフィールドに含まれているデータの有効性は確認されません。When skipping rows, the SQL Server データベース エンジンSQL Server Database Engine looks only at the field terminators, and does not validate the data in the fields of skipped rows.

FIRE_TRIGGERSFIRE_TRIGGERS
一括読み込みの操作中に、インポート先のテーブルで定義されている挿入トリガーを実行します。Specifies that any insert triggers defined on the destination table execute during the bulk-import operation. 対象テーブルで INSERT 操作にトリガーが定義されている場合、そのトリガーは完了した各バッチに対して実行されます。If triggers are defined for INSERT operations on the target table, they are fired for every completed batch.

FIRE_TRIGGERS が指定されていない場合、挿入トリガーは実行されません。If FIRE_TRIGGERS is not specified, no insert triggers execute.

FORMATFILE_DATASOURCE = 'data_source_name'FORMATFILE_DATASOURCE = 'data_source_name'
適用されます: SQL Server 2017SQL Server 2017 1.1 です。Applies to: SQL Server 2017SQL Server 2017 1.1.
名前付きの外部データ ソースは、インポートされたデータのスキーマを定義するフォーマット ファイルの Azure Blob ストレージの場所を指しています。Is a named external data source pointing to the Azure Blob storage location of the format file that will define the schema of imported data. 使用して、外部データ ソースを作成する必要があります、TYPE = BLOB_STORAGEオプションで追加されたSQL Server 2017SQL Server 2017CTP 1.1 です。The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017SQL Server 2017 CTP 1.1. 詳細については、次を参照してください。 CREATE EXTERNAL DATA SOURCEです。For more information, see CREATE EXTERNAL DATA SOURCE.

KEEPIDENTITYKEEPIDENTITY
インポートしたデータ ファイルの ID 値 (複数可) を ID 列に使用することを指定します。Specifies that identity value or values in the imported data file are to be used for the identity column. この列の id 値を検証するがインポートされない KEEPIDENTITY を指定しない場合および SQL ServerSQL Serverテーブル作成時に指定されたシードと増分値に基づいて一意の値を自動的に割り当てます。If KEEPIDENTITY is not specified, the identity values for this column are verified but not imported and SQL ServerSQL Server automatically assigns unique values based on the seed and increment values specified during table creation. データ ファイルにテーブルまたはビュー内の id 列の値が含まれていない場合は、フォーマット ファイルを使用して、テーブルまたはビュー内の id 列が、データをインポートするときにスキップすることを指定するには SQL ServerSQL Server列の一意の値を自動的に割り当てます。If the data file does not contain values for the identity column in the table or view, use a format file to specify that the identity column in the table or view is to be skipped when importing data; SQL ServerSQL Server automatically assigns unique values for the column. 詳細については、「DBCC CHECKIDENT (Transact-SQL)」をご覧ください。For more information, see DBCC CHECKIDENT (Transact-SQL).

詳細については、保持するかを参照してください。 特定の値を参照してください維持の Id 値とデータの一括インポート (です。SQL Server ).For more information, see about keeping identify values see Keep Identity Values When Bulk Importing Data (SQL Server).

KEEPNULLSKEEPNULLS
一括インポート操作時、空の列が挿入される場合は NULL 値が保持されます。その列の既定値は格納されません。Specifies that empty columns should retain a null value during the bulk-import operation, instead of having any default values for the columns inserted. 詳細については、「一括インポート中の NULL の保持または既定値の使用 (SQL Server)」をご覧ください。For more information, see Keep Nulls or Use Default Values During Bulk Import (SQL Server).

KILOBYTES_PER_BATCH = kilobytes_per_batchKILOBYTES_PER_BATCH = kilobytes_per_batch
バッチごとのデータのキロバイト (KB) のおおよその数を指定kilobytes_per_batchです。Specifies the approximate number of kilobytes (KB) of data per batch as kilobytes_per_batch. KILOBYTES_PER_BATCH の既定値はありません。By default, KILOBYTES_PER_BATCH is unknown. パフォーマンスに関する考慮事項については、後の「解説」を参照してください。For information about performance considerations, see "Remarks," later in this topic.

LASTROW=last_rowLASTROW=last_row
読み込み終了行の行番号を指定します。Specifies the number of the last row to load. 既定値は 0 で、これは指定のデータ ファイルの最終行を表します。The default is 0, which indicates the last row in the specified data file.

MAXERRORS = max_errorsMAXERRORS = max_errors
一括インポート操作時に許容されるデータの構文エラーの最大数を指定します。この最大数に達すると、操作は取り消されます。Specifies the maximum number of syntax errors allowed in the data before the bulk-import operation is canceled. 一括インポート操作でインポートできない行は無視され、それぞれ 1 つのエラーとしてカウントされます。Each row that cannot be imported by the bulk-import operation is ignored and counted as one error. 場合max_errorsが指定されていない、既定値は 10 です。If max_errors is not specified, the default is 10.

注意

MAX_ERRORS オプションは、制約チェックや変換には適用されませんmoneybigintデータ型。The MAX_ERRORS option does not apply to constraint checks or to converting money and bigint data types.

順序 ({[ASC |DESC]} [ .n ] )ORDER ( { column [ ASC | DESC ] } [ ,... n ] )
データ ファイル内のデータの並べ替え方法を指定します。Specifies how the data in the data file is sorted. インポートするデータをテーブル上のクラスター化インデックスに従って並べ替えると、一括インポートのパフォーマンスが向上します。Bulk import performance is improved if the data being imported is sorted according to the clustered index on the table, if any. データ ファイルが異なる順序で並んでいる場合、つまりクラスター化インデックス キーの順序以外の順で並んでいるか、テーブルにクラスター化インデックスが存在しない場合、ORDER 句は無視されます。If the data file is sorted in a different order, that is other than the order of a clustered index key or if there is no clustered index on the table, the ORDER clause is ignored. 指定する列の名前は、インポート先のテーブル内で有効な列の名前であることが必要です。The column names supplied must be valid column names in the destination table. 既定では、一括挿入操作はデータ ファイルが並べ替えられていないことを前提に実行されます。By default, the bulk insert operation assumes the data file is unordered. 最適な一括インポートのため、 SQL ServerSQL Server では、インポートするデータが並べ替えられているかどうかも検証されます。For optimized bulk import, SQL ServerSQL Server also validates that the imported data is sorted.

n
複数の列を指定できることを示すプレースホルダーです。Is a placeholder that indicates that multiple columns can be specified.

ROWS_PER_BATCH = rows_per_batchROWS_PER_BATCH =rows_per_batch
データ ファイル内のデータの行の概数を示します。Indicates the approximate number of rows of data in the data file.

既定では、データ ファイル内のすべてのデータは単一のトランザクションとしてサーバーに送られ、バッチ内の行数はクエリ オプティマイザーには通知されません。By default, all the data in the data file is sent to the server as a single transaction, and the number of rows in the batch is unknown to the query optimizer. ROWS_PER_BATCH を値 > 0 で指定した場合、サーバーでは一括インポート操作の最適化にこの値が使用されます。If you specify ROWS_PER_BATCH (with a value > 0) the server uses this value to optimize the bulk-import operation. ROWS_PER_BATCH に指定する値は、実際の行数とほぼ同じにする必要があります。The value specified for ROWS_PER_BATCH should approximately the same as the actual number of rows. パフォーマンスに関する考慮事項については、後の「解説」を参照してください。For information about performance considerations, see "Remarks," later in this topic.

TABLOCKTABLOCK
一括インポート操作中にテーブル レベルのロックを取得します。Specifies that a table-level lock is acquired for the duration of the bulk-import operation. テーブルにインデックスがなく、TABLOCK を指定した場合は、複数のクライアントで同時に 1 つのテーブルを読み込むことができます。A table can be loaded concurrently by multiple clients if the table has no indexes and TABLOCK is specified. 既定では、ロック動作はテーブル オプション table lock on bulk loadによって決定されます。By default, locking behavior is determined by the table option table lock on bulk load. 一括インポート操作中にロックを維持すると、テーブル ロックの競合が少なくなるので、場合によってはパフォーマンスが大幅に向上します。Holding a lock for the duration of the bulk-import operation reduces lock contention on the table, in some cases can significantly improve performance. パフォーマンスに関する考慮事項については、後の「解説」を参照してください。For information about performance considerations, see "Remarks," later in this topic.

列ストア インデックスです。For columnstore index. 複数の行セットに内部的に分かれているために、ロックの動作が異なります。the locking behaviour is different because it is internally divided into multiple rowsets. 各スレッドは、同時実行データ読み込みのセッションで並列のデータの読み込みを許可する行セットで X ロックを取得して、それぞれの行セットに排他的にデータを読み込みます。Each thread loads data exclusively into each rowset by taking a X lock on the rowset allowing parallel data load with concurrent data load sessions. TABLOCK オプションの使用には、他の同時実行スレッドを同時にデータを読み込むようにする (従来の行セットの BU ロック) とは異なり、テーブルで、X ロックを実行するスレッドになります。The use of TABLOCK option will cause thread to take an X lock on the table (unlike BU lock for traditional rowsets) which will prevent other concurrent threads to load data concurrently.

入力ファイル形式のオプションInput file format options

形式 = 'CSV'FORMAT = 'CSV'
適用対象: SQL Server 2017SQL Server 2017 CTP 1.1.Applies to: SQL Server 2017SQL Server 2017 CTP 1.1.
準拠しているコンマ区切り値ファイルを指定します、 RFC 4180標準です。Specifies a comma separated values file compliant to the RFC 4180 standard.

FIELDQUOTE = 'field_quote'FIELDQUOTE = 'field_quote'
適用対象: SQL Server 2017SQL Server 2017 CTP 1.1.Applies to: SQL Server 2017SQL Server 2017 CTP 1.1.
CSV ファイルの引用符の文字として使用される文字を指定します。Specifies a character that will be used as the quote character in the CSV file. 指定されていない場合で定義されている、引用符の文字として引用符文字 (") を使用、 RFC 4180標準です。If not specified, the quote character (") will be used as the quote character as defined in the RFC 4180 standard.

FORMATFILE ='format_file_path'FORMATFILE ='format_file_path'
フォーマット ファイルの完全パスを指定します。Specifies the full path of a format file. フォーマット ファイルを使用して作成された、格納された応答を含むデータ ファイルの説明、 bcp同じテーブルまたはビュー上のユーティリティ。A format file describes the data file that contains stored responses created by using the bcp utility on the same table or view. フォーマット ファイルは次の場合に使用します。The format file should be used if:

  • データ ファイルに含まれる列の数が、テーブルまたはビューより多い、または少ない。The data file contains greater or fewer columns than the table or view.

  • 列の順序が異なる。The columns are in a different order.

  • 列の区切り記号が異なる。The column delimiters vary.

  • データ形式に他に異なる点がある。There are other changes in the data format. フォーマット ファイルは、通常を使用して作成、 bcpユーティリティし、必要に応じてテキスト エディターで修正します。Format files are typically created by using the bcp utility and modified with a text editor as needed. 詳細については、「 bcp Utility」を参照してください。For more information, see bcp Utility.

適用対象: SQL Server 2017SQL Server 2017 CTP 1.1.Applies to: SQL Server 2017SQL Server 2017 CTP 1.1.
以降でSQL Server 2017SQL Server 2017CTP 1.1、format_file_path は Azure blob ストレージにすることができます。Beginning with SQL Server 2017SQL Server 2017 CTP 1.1, the format_file_path can be in Azure blob storage.

FIELDTERMINATOR ='field_terminator'FIELDTERMINATOR ='field_terminator'
使用されるフィールド ターミネータを指定しますcharwidecharデータ ファイル。Specifies the field terminator to be used for char and widechar data files. 既定のフィールド ターミネータは \t (タブ文字) です。The default field terminator is \t (tab character). 詳細については、「 フィールド ターミネータと行ターミネータの指定 (SQL Server)」を参照してください。For more information, see Specify Field and Row Terminators (SQL Server).

ROWTERMINATOR ='row_terminator'ROWTERMINATOR ='row_terminator'
使用される行ターミネータを指定しますcharwidecharデータ ファイル。Specifies the row terminator to be used for char and widechar data files. 既定の行ターミネータは\r\n (改行文字)。The default row terminator is \r\n (newline character). 詳細については、「 フィールド ターミネータと行ターミネータの指定 (SQL Server)」を参照してください。For more information, see Specify Field and Row Terminators (SQL Server).

互換性Compatibility

BULK INSERT によって、ファイルから読み込んだデータに対して厳密なデータ検証とデータ チェックが実行されるので、無効なデータを使用して既存のスクリプトを実行すると、スクリプトは失敗する可能性があります。BULK INSERT enforces strict data validation and data checks of data read from a file that could cause existing scripts to fail when they are executed on invalid data. たとえば、BULK INSERT では次の検証が行われます。For example, BULK INSERT verifies that:

  • ネイティブ表記floatまたは実際データ型が無効です。The native representations of float or real data types are valid.

  • Unicode データが偶数バイト長かどうか。Unicode data has an even-byte length.

データ型Data Types

文字列から 10 進数へのデータ型変換String-to-Decimal Data Type Conversions

BULK INSERT で使用される 10 進数の文字列データ型変換と同じ規則に従います、 Transact-SQLTransact-SQL 変換関数で、科学的表記法を使用して数値を表す文字列を拒否します。The string-to-decimal data type conversions used in BULK INSERT follow the same rules as the Transact-SQLTransact-SQL CONVERT function, which rejects strings representing numeric values that use scientific notation. したがって、BULK INSERT を実行するときに、そのような文字列が無効な値として評価され、変換エラーが報告されます。Therefore, BULK INSERT treats such strings as invalid values and reports conversion errors.

この動作を回避するには、一括インポートの科学的表記法、フォーマット ファイルを使用float 10 進数の列へのデータ。To work around this behavior, use a format file to bulk import scientific notation float data into a decimal column. フォーマット ファイルで明示的に記述する列として実際またはfloatデータ。In the format file, explicitly describe the column as real or float data. これらのデータ型の詳細については、次を参照してください。 float、real および #40 です。TRANSACT-SQL と #41 です。.For more information about these data types, see float and real (Transact-SQL).

注意

フォーマット ファイル実際データとして、 SQLFLT4データ型とfloatデータとして、 SQLFLT8データ型。Format files represent real data as the SQLFLT4 data type and float data as the SQLFLT8 data type. XML 以外のフォーマット ファイルについては、次を参照してくださいbcp ( を使用して、ファイル ストレージ型の指定。SQL Server ).For information about non-XML format files, see Specify File Storage Type by Using bcp (SQL Server).

科学的表記法を使用した数値をインポートする例Example of Importing a Numeric Value that Uses Scientific Notation

この例では、次のテーブルを使用します。This example uses the following table:

CREATE TABLE t_float(c1 float, c2 decimal (5,4));  

ユーザーの一括たいデータのインポート、t_floatテーブル。The user wants to bulk import data into the t_float table. データ ファイル C:\t_float-c.dat には、科学的表記法が含まれています。 floatデータ; 例。The data file, C:\t_float-c.dat, contains scientific notation float data; for example:

8.0000000000000002E-28.0000000000000002E-2  

しかし、テーブルの 2 番目の列 t_floatc2 データ型を使用しているので、このデータを BULK INSERT によって decimal に直接インポートすることはできません。However, BULK INSERT cannot import this data directly into t_float, because its second column, c2, uses the decimal data type. そのため、フォーマット ファイルが必要です。Therefore, a format file is necessary. フォーマット ファイルは、科学的表記法をマップする必要がありますfloat列の 10 進数形式にデータをc2です。The format file must map the scientific notation float data to the decimal format of column c2.

次のフォーマット ファイルでは、SQLFLT8データ型に 2 番目のデータ フィールドを 2 番目の列にマップします。The following format file uses the SQLFLT8 data type to map the second data field to the second column:

<?xml version="1.0"?> 
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<RECORD> 
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/> 
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30"/>  </RECORD>  <ROW> 
<COLUMN SOURCE="1" NAME="c1" xsi:type="SQLFLT8"/> 
<COLUMN SOURCE="2" NAME="c2" xsi:type="SQLFLT8"/>  </ROW> </BCPFORMAT> 

このフォーマット ファイル (ファイル名 C:\t_floatformat-c-xml.xml) を使用してテスト テーブルにテスト データをインポートするには、次の Transact-SQLTransact-SQL ステートメントを実行します。To use this format file (using the file name C:\t_floatformat-c-xml.xml) to import the test data into the test table, issue the following Transact-SQLTransact-SQL statement:

BULK INSERT bulktest..t_float  
FROM 'C:\t_float-c.dat' WITH (FORMATFILE='C:\t_floatformat-c-xml.xml');  
GO  

SQLXML ドキュメントの一括エクスポートまたは一括インポート用のデータ型Data Types for Bulk Exporting or Importing SQLXML Documents

SQLXML データを一括エクスポートまたは一括インポートするには、フォーマット ファイルで次のいずれかのデータ型を使用します。To bulk export or import SQLXML data, use one of the following data types in your format file:

データ型Data type 結果Effect
SQLCHAR または SQLVARCHARSQLCHAR or SQLVARCHAR データは、クライアント コード ページまたは照合順序で暗黙的に指定されるコード ページで送られます。The data is sent in the client code page or in the code page implied by the collation). 効果は DATAFILETYPE を指定すると同じ= 'char'フォーマット ファイルを指定せずします。The effect is the same as specifying the DATAFILETYPE ='char' without specifying a format file.
SQLNCHAR または SQLNVARCHARSQLNCHAR or SQLNVARCHAR データは Unicode として送られます。The data is sent as Unicode. 効果は DATAFILETYPE を指定すると同じ= 'widechar'フォーマット ファイルを指定せずします。The effect is the same as specifying the DATAFILETYPE = 'widechar' without specifying a format file.
SQLBINARY または SQLVARBINSQLBINARY or SQLVARBIN データは変換なしで送られます。The data is sent without any conversion.

全般的な解説General Remarks

BULK INSERT ステートメント、INSERT ... 選択*openrowset (bulk) からステートメントでは、およびbcpコマンドを参照してください一括インポートし、データ ファイルのエクスポート (です。SQL Server ).For a comparison of the BULK INSERT statement, the INSERT ... SELECT * FROM OPENROWSET(BULK...) statement, and the bcp command, see Bulk Import and Export of Data (SQL Server).

データを一括インポートの準備については、次を参照してくださいデータを一括エクスポートまたはインポート ( を準備する。SQL Server ).For information about preparing data for bulk import, see Prepare Data for Bulk Export or Import (SQL Server).

BULK INSERT ステートメントは、テーブルまたはビューにデータをインポートするために、ユーザー定義のトランザクション内で実行できます。The BULK INSERT statement can be executed within a user-defined transaction to import data into a table or view. 必要に応じて、一括インポート データの複数の一致を使用するために、トランザクションは BULK INSERT ステートメントで BATCHSIZE 句を指定できます。Optionally, to use multiple matches for bulk importing data, a transaction can specify the BATCHSIZE clause in the BULK INSERT statement. 複数のバッチのトランザクションがロールバックされた場合、トランザクションに送信したすべてのバッチ SQL ServerSQL Serverがロールバックされます。If a multiple-batch transaction is rolled back, every batch that the transaction has sent to SQL ServerSQL Server is rolled back.

相互運用性Interoperability

CSV ファイルからのデータのインポートImporting Data from a CSV file

以降でSQL Server 2017SQL Server 2017CTP 1.1、一括挿入は、CSV 形式をサポートしています。Beginning with SQL Server 2017SQL Server 2017 CTP 1.1, BULK INSERT supports the CSV format.
前にSQL Server 2017SQL Server 2017CTP 1.1 でコンマ区切り値 (CSV) ファイルはサポートされていない SQL ServerSQL Server一括インポート操作します。Before SQL Server 2017SQL Server 2017 CTP 1.1, comma-separated value (CSV) files are not supported by SQL ServerSQL Server bulk-import operations. ただし、場合によっては、 SQL ServerSQL Serverに対してデータを一括インポートする際、CSV ファイルをデータ ファイルとして使用できます。However, in some cases, a CSV file can be used as the data file for a bulk import of data into SQL ServerSQL Server. CSV データ ファイルからデータをインポートするための要件については、次を参照してください一括エクスポートまたは一括インポートのデータの準備 (SQL Server).For information about the requirements for importing data from a CSV data file, see Prepare Data for Bulk Export or Import (SQL Server).

ログ記録の動作Logging Behavior

一括インポートによって実行される行挿入操作がトランザクション ログに記録される条件について詳しくは、「一括インポートで最小ログ記録を行うための前提条件」をご覧ください。For information about when row-insert operations that are performed by bulk import are logged in the transaction log, see Prerequisites for Minimal Logging in Bulk Import.

制限Restrictions

BULK INSERT でフォーマット ファイルを使用する場合、指定できるフィールド数は 1,024 個までです。When using a format file with BULK INSERT, you can specify up to 1024 fields only. これは、テーブルに許容される最大列数と同じです。This is same as the maximum number of columns allowed in a table. 1,024 個を超えるフィールドが含まれるデータ ファイルで BULK INSERT を使用すると、BULK INSERT によってエラー 4822 が生成されます。If you use BULK INSERT with a data file that contains more than 1024 fields, BULK INSERT generates the 4822 error. Bcp ユーティリティされていませんこの制限がある、そのため、1,024 個を超えるフィールドを含むデータ ファイルの使用、 bcpコマンド。The bcp utility does not have this limitation, so for data files that contain more than 1024 fields, use the bcp command.

パフォーマンスに関する考慮事項Performance Considerations

1 つのバッチでフラッシュされるページの数が内部しきい値を超えると、バッチのコミット時にフラッシュするページを特定するためにバッファー プールのフル スキャンが行われる可能性があります。If the number of pages to be flushed in a single batch exceeds an internal threshold, a full scan of the buffer pool might occur to identify which pages to flush when the batch commits. フル スキャンが行われると、一括インポートのパフォーマンスが低下します。This full scan can hurt bulk-import performance. この内部しきい値の問題は、大きなバッファー プールと遅い I/O サブシステムの組み合わせでも発生します。A likely case of exceeding the internal threshold occurs when a large buffer pool is combined with a slow I/O subsystem. 大規模なコンピューターでバッファー オーバーフローを防ぐには、TABLOCK ヒントを使用しないようにするか (一括インポートの最適化は行われなくなります)、バッチ サイズを小さくします (一括インポートの最適化は引き続き行われます)。To avoid buffer overflows on large machines, either do not use the TABLOCK hint (which will remove the bulk optimizations) or use a smaller batch size (which preserves the bulk optimizations).

コンピューターはそれぞれ異なるため、実際のデータでさまざまなバッチ サイズを試して最適な値を見つけるようにすることをお勧めします。Because computers vary, we recommend that you test various batch sizes with your data load to find out what works best for you.

セキュリティSecurity

セキュリティ アカウントの委任 (権限借用)Security Account Delegation (Impersonation)

ユーザーが SQL ServerSQL Server ログインを使用する場合は、 SQL ServerSQL Server プロセス アカウントのセキュリティ プロファイルが使用されます。If a user uses a SQL ServerSQL Server login, the security profile of the SQL ServerSQL Server process account is used. SQL Server 認証を使用したログインは、データベース エンジン以外では認証できません。A login using SQL Server authentication cannot be authenticated outside of the Database Engine. そのため、SQL Server 認証を使用したログインによって BULK INSERT コマンドが開始されると、SQL Server プロセス アカウント (SQL Server データベース エンジン サービスで使用されるアカウント) のセキュリティ コンテキストを使用してデータへの接続が行われます。Therefore, when a BULK INSERT command is initiated by a login using SQL Server authentication, the connection to the data is made using the security context of the SQL Server process account (the account used by the SQL Server Database Engine service). ソース データを正しく読み取るには、SQL Server データベース エンジンで使用されるアカウントに対して、ソース データへのアクセス権を付与する必要があります。これに対して、 SQL ServerSQL Server ユーザーが Windows 認証を使用してログインした場合、そのユーザーは SQL ServerSQL Server プロセスのセキュリティ プロファイルに関係なく、そのユーザー アカウントでアクセス可能なファイルのみを読み取ることができます。To successfully read the source data you must grant the account used by the SQL Server Database Engine, access to the source data.In contrast, if a SQL ServerSQL Server user logs on by using Windows Authentication, the user can read only those files that can be accessed by the user account, regardless of the security profile of the SQL ServerSQL Server process.

使用して BULK INSERT ステートメントを実行するときにsqlcmdまたはosql、1 台のコンピューターからデータを挿入 SQL ServerSQL Server別のコンピューターを指定して、 data_file UNC パスを使用して 3 番目のコンピューターで 4861 エラーが発生する可能性があります。When executing the BULK INSERT statement by using sqlcmd or osql, from one computer, inserting data into SQL ServerSQL Server on a second computer, and specifying a data_file on third computer by using a UNC path, you may receive a 4861 error.

このエラーを解決するには、 SQL ServerSQL Server認証を指定し、 SQL ServerSQL Serverのセキュリティ プロファイルを使用するログインを SQL ServerSQL Serverプロセス アカウント、または Windows セキュリティ アカウントの委任を有効にするを構成します。To resolve this error, use SQL ServerSQL Server Authentication and specify a SQL ServerSQL Server login that uses the security profile of the SQL ServerSQL Server process account, or configure Windows to enable security account delegation. ユーザー アカウントの信頼性を委任の対象として有効にする方法の詳細については、Windows ヘルプを参照してください。For information about how to enable a user account to be trusted for delegation, see Windows Help.

このおよび BULK INSERT を使用するための他のセキュリティの考慮事項に関する詳細については、次を参照してくださいを使用して BULK INSERT または OPENROWSET ( した一括データのインポート。BULK...)(です。SQL Server ).For more information about this and other security considerations for using BULK INSERT, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server).

PermissionsPermissions

INSERT および ADMINISTER BULK OPERATIONS 権限が必要です。Requires INSERT and ADMINISTER BULK OPERATIONS permissions. ただし次の操作を 1 つ以上行う場合は、さらに ALTER TABLE 権限が必要になります。Additionally, ALTER TABLE permission is required if one or more of the following is true:

  • 制約が存在する場合に、CHECK_CONSTRAINTS オプションを指定しない。Constraints exist and the CHECK_CONSTRAINTS option is not specified.

    注意

    制約の無効化は既定の動作です。Disabling constraints is the default behavior. 制約を明示的に検証するには、CHECK_CONSTRAINTS オプションを使用します。To check constraints explicitly, use the CHECK_CONSTRAINTS option.

  • トリガーが存在する場合に、FIRE_TRIGGER オプションを指定しない。Triggers exist and the FIRE_TRIGGER option is not specified.

    注意

    既定では、トリガーは起動しません。By default, triggers are not fired. トリガーを明示的に起動するには、FIRE_TRIGGERS オプションを使用します。To fire triggers explicitly, use the FIRE_TRIGGER option.

  • KEEPIDENTITY オプションを使用して、データ ファイルから ID 値をインポートする。You use the KEEPIDENTITY option to import identity value from data file.

使用例Examples

A.A. ファイルからのデータのインポートにパイプを使用するUsing pipes to import data from a file

次の例に、注文明細情報のインポート、 AdventureWorks2012.Sales.SalesOrderDetail 、パイプを使用して、指定されたデータ ファイルからテーブル (|)、フィールド ターミネータとしてと|\n行ターミネータとして。The following example imports order detail information into the AdventureWorks2012.Sales.SalesOrderDetail table from the specified data file by using a pipe (|) as the field terminator and |\n as the row terminator.

BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
   FROM 'f:\orders\lineitem.tbl'  
   WITH   
      (  
         FIELDTERMINATOR =' |',  
         ROWTERMINATOR =' |\n'  
      );  

B.B. FIRE_TRIGGERS 引数を使用するUsing the FIRE_TRIGGERS argument

次の例では、FIRE_TRIGGERS 引数を指定します。The following example specifies the FIRE_TRIGGERS argument.

BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
   FROM 'f:\orders\lineitem.tbl'  
   WITH  
     (  
        FIELDTERMINATOR =' |',  
        ROWTERMINATOR = ':\n',  
        FIRE_TRIGGERS  
      );  

C.C. 行ターミネータとしてライン フィードを使用するUsing line feed as a row terminator

次の例では、UNIX 出力などのように、ライン フィードを行ターミネータとして使用するファイルをインポートします。The following example imports a file that uses the line feed as a row terminator such as a UNIX output:

DECLARE @bulk_cmd varchar(1000);  
SET @bulk_cmd = 'BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
FROM ''<drive>:\<path>\<filename>''   
WITH (ROWTERMINATOR = '''+CHAR(10)+''')';  
EXEC(@bulk_cmd);  

注意

Microsoft Windows によるテキスト ファイルの処理方法によって(\n自動的に置き換え\r\n)です。Due to how Microsoft Windows treats text files (\n automatically gets replaced with \r\n).

D.D. コード ページの指定Specifying a code page

次の例では、コード ページを指定する方法を示します。The following example show how to specify a code page.

BULK INSERT MyTable  
FROM 'D:\data.csv'  
WITH  
( CODEPAGE = '65001',  
    DATAFILETYPE = 'char',  
    FIELDTERMINATOR = ','  
);  

E.E. CSV ファイルからデータをインポートします。Importing data from a CSV file

次の例では、CSV ファイルを指定する方法を示します。The following example show how to specify a CSV file.

BULK INSERT Sales.Invoices
FROM '\\share\invoices\inv-2016-07-25.csv'
WITH (FORMAT = 'CSV'); 

F.F. Azure blob ストレージ内のファイルからデータをインポートします。Importing data from a file in Azure blob storage

次の例は、Azure blob ストレージの場所に、外部データ ソースとして構成されている csv ファイルからデータを読み込む方法を示します。The following example shows how to load data from a csv file in an Azure blob storage location, which has been configured as an external data source. これには、共有アクセス署名を使用してデータベース スコープ資格情報が必要です。This requires a database scoped credential using a shared access signature.

BULK INSERT Sales.Invoices
FROM 'inv-2017-01-19.csv'
WITH (DATA_SOURCE = 'MyAzureInvoices',
     FORMAT = 'CSV'); 

完了BULK INSERT資格情報と外部データ ソースの構成などの例を参照してください例の一括データにアクセスする Azure Blob ストレージにです。For complete BULK INSERT examples including configuring the credential and external data source, see Examples of Bulk Access to Data in Azure Blob Storage.

その他の例Additional Examples

その他のBULK INSERT例については、次のトピックで説明します。Other BULK INSERT examples are provided in the following topics:

参照See Also

データの一括インポートと一括エクスポート (SQL Server) Bulk Import and Export of Data (SQL Server)
bcp Utility bcp Utility
インポートまたはエクスポート データ ( 用のフォーマット ファイルSQL Server ) Format Files for Importing or Exporting Data (SQL Server)
INSERT (Transact-SQL) INSERT (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
一括エクスポートまたはインポート ( のデータを準備します。SQL Server ) Prepare Data for Bulk Export or Import (SQL Server)
sp_tableoption (です。TRANSACT-SQL と #41 です。sp_tableoption (Transact-SQL)