引数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)」を参照してください。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\Path\FileNameです。A UNC name has the form \\Systemname\ShareName\Path\FileName.例 :For example:

BATCHSIZE =batch_sizeBATCHSIZE =batch_size1 つのバッチに含まれている行の数を指定します。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.

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."

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.

KEEPIDENTITYKEEPIDENTITYインポートしたデータ ファイルの ID 値 (複数可) を ID 列に使用することを指定します。Specifies that identity value or values in the imported data file are to be used for the identity column.KEEPIDENTITY を指定しない場合、この列の ID 値は検証のみが行われ、インポートされません。この場合 SQL ServerSQL Server では、テーブルの作成時に指定された seed と増分値に基づいて、一意な値が自動的に割り当てられます。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).

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_row 読み込み終了行の行番号を指定します。LASTROW =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.

ORDER ( { column [ 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.

nn複数の列を指定できることを示すプレースホルダーです。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.

FIELDQUOTE = 'field_quote'FIELDQUOTE = 'field_quote'適用対象:SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to:SQL Server 2017 (14.x)SQL Server 2017 (14.x) 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:

データ形式に他に変更点がある。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.

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.

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.

制限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.

SecuritySecurity

セキュリティ アカウントの委任 (権限借用)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.

あるコンピューターで sqlcmd または osql を使用して BULK INSERT ステートメントを実行し、2 台目のコンピューターの SQL ServerSQL Server にデータを挿入し、UNC パスを使用して 3 台目のコンピューターの data_file を指定した場合、エラー 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.

使用例Examples

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

次の例では、パイプ (|) をフィールド ターミネータ、|\n を行ターミネータとして使用し、指定のデータ ファイルから AdventureWorks2012.Sales.SalesOrderDetail テーブルに、注文の詳細情報をインポートします。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.

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

次の例は、; をフィールド ターミネータ、0x0a を行ターミネータとして使用して、ヘッダー (先頭行) をスキップして CSV ファイルを指定する方法を示しています。The following example show how to specify a CSV file, skipping the header (first row), using ; as field terminator and 0x0a as line terminator:

次の例では、外部データ ソースとして構成されている Azure Blob Storage の場所に 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.これには、Shared Access Signature を使用したデータベース スコープ資格情報が必要です。This requires a database scoped credential using a shared access signature.

CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';
-- NOTE: Make sure that you don't have a leading ? in SAS token, and
-- that you have at least read permission on the object that should be loaded srt=o&sp=r, and
-- that expiration period is valid (all dates are in UTC time)
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH ( TYPE = BLOB_STORAGE,
LOCATION = 'https://****************.blob.core.windows.net/invoices',
CREDENTIAL= MyAzureBlobStorageCredential --> CREDENTIAL is not required if a blob has public access!
);
BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage');

次の例では、外部データ ソースとして構成されている Azure Blob Storage の場所に 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 and also specifying an error file.これには、Shared Access Signature を使用したデータベース スコープ資格情報が必要です。This requires a database scoped credential using a shared access signature.Azure SQL Database を実行している場合、ERRORFILE オプションと共に ERRORFILE_DATA_SOURCE も指定する必要があることに注意してください。指定しないと、アクセス許可エラーでインポートが失敗する可能性があります。Note that if running on Azure SQL Database, ERRORFILE option should be accompanied by ERRORFILE_DATA_SOURCE otherwise the import might fail with permissions error.ERRORFILE で指定するファイルは、コンテナー内に存在していてはなりません。The file specified in ERRORFILE should not exist in the container.