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

重要

Azure SQL データベースのマネージ インスタンス、この T-SQL 機能には、特定の動作の変更。On Azure SQL Database Managed Instance, this T-SQL feature has certain behavior changes. 参照してくださいSQL Server から Azure SQL データベース管理されているインスタンスの T-SQL で違いすべて T-SQL 動作の変更の詳細。See Azure SQL Database Managed Instance T-SQL differences from SQL Server for details for all T-SQL behavior changes.

トピック リンク アイコン 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)」を参照してください。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. たとえば、 \\SystemX\DiskZ\Sales\update.txtのようにします。For example, \\SystemX\DiskZ\Sales\update.txt.
適用対象: 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.
SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP1.1 以降では、data_file は Azure Blob Storage に格納することができます。Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP1.1, the data_file can be in Azure blob storage.

' data_source_name ' ' data_source_name '
適用対象: 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.
インポートされるファイルの Azure Blob Storage の場所を指している名前付きの外部データ ソースです。Is a named external data source pointing to the Azure Blob storage location of the file that will be imported. 外部データ ソースは、SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 で追加された TYPE = BLOB_STORAGE オプションを使用して作成する必要があります。The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) 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 は、データに charvarchartext 列 (文字値が 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.

重要

CODEPAGE は、Linux ではサポートされていないオプションです。CODEPAGE is not a supported option on Linux.

注意

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

CODEPAGE の値CODEPAGE value DescriptionDescription
ACPACP charvarchar、または text データ型の列は、 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、または text のデータ型の列は、システムの 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 2016 (13.x)SQL Server 2016 (13.x) より前のバージョンはコード ページ 65001 (UTF-8 エンコード) をサポートしません。** Important *\* Versions prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) 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).
nativenative ネイティブ (データベース) データ型。Native (database) data types. bcp ユーティリティを使用して SQL ServerSQL Server からデータを一括インポートし、ネイティブ データ ファイルを作成します。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 ネイティブ (データベース) データ型。ただし、データが Unicode として格納される charvarchartext 列は除きます。Native (database) data types, except in char, varchar, and text columns, in which data is stored as Unicode. bcp ユーティリティを使用して SQL ServerSQL Server からデータを一括インポートし、widenative データ ファイルを作成します。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 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. SQL Server 2017 (14.x)SQL Server 2017 (14.x) 以降では、error_file_path は Azure Blob Storage に格納することができます。Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the error_file_path can be in Azure blob storage.

'errorfile_data_source_name''errorfile_data_source_name'
適用対象: 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. 名前付きの外部データ ソースで、インポート中に見つかったエラーを格納するエラー ファイルの Azure Blob Storage の場所を指しています。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. 外部データ ソースは、SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 で追加された TYPE = BLOB_STORAGE オプションを使用して作成する必要があります。The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) 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 2017 (14.x)SQL Server 2017 (14.x) 1.1。Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1.1.
インポートされるデータのスキーマを定義するフォーマット ファイルの Azure Blob Storage の場所を指している名前付きの外部データ ソースです。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. 外部データ ソースは、SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 で追加された TYPE = BLOB_STORAGE オプションを使用して作成する必要があります。The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) 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. 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).

ID 値の保持について詳しくは、「データの一括インポート時の 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 オプションは、制約チェックや money および bigint のデータ型の変換には適用されません。The MAX_ERRORS option does not apply to constraint checks or to converting money and bigint data types.

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.

入力ファイル フォーマットのオプションInput file format options

FORMAT = 'CSV'FORMAT = 'CSV'
適用対象: 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.
RFC 4180 標準に準拠しているコンマ区切り値ファイルを指定します。Specifies a comma separated values file compliant to the RFC 4180 standard.

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:

  • データ ファイルに含まれる列の数が、テーブルまたはビューより多い、または少ない。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 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.
SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 以降では、format_file_path は Azure Blob Storage に格納することができます。Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the format_file_path can be in Azure blob storage.

FIELDTERMINATOR ='field_terminator'FIELDTERMINATOR ='field_terminator'
char および widechar 型のデータ ファイルに使用するフィールド ターミネータを指定します。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'
char および widechar 型のデータ ファイルに使用する行ターミネータを指定します。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 データ型または real データ型のネイティブ表記が有効かどうか。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-SQLCONVERT 関数と同じ規則が適用されるので、科学的表記法を使用した数値を表す文字列は拒否されます。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. フォーマット ファイルには、列のデータを明示的に real または 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).

注意

フォーマット ファイル real データとして、 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 型のデータを列 c2 の 10 進形式にマップする必要があります。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 ... SELECT * FROM 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 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 以降では、BULK INSERT は CSV 形式をサポートしています。Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, BULK INSERT supports the CSV format.
SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 より前は、 SQL ServerSQL Server の一括インポート操作ではコンマ区切り値 (CSV) ファイルがサポートされていません。Before SQL Server 2017 (14.x)SQL Server 2017 (14.x) 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.

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.

この問題を解決するには、 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).

アクセス許可Permissions

INSERT および ADMINISTER BULK OPERATIONS 権限が必要です。Requires INSERT and ADMINISTER BULK OPERATIONS permissions. Azure SQL Database では、INSERT および ADMINISTER DATABASE BULK OPERATIONS 権限が必要です。In Azure SQL Database, INSERT and ADMINISTER DATABASE BULK OPERATIONS permissions are required. ただし次の操作を 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

次の例では、パイプ (|) をフィールド ターミネータ、|\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.

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 Storage 内のファイルからデータをインポートするImporting data from a file in Azure blob storage

次の例では、外部データ ソースとして構成されている 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.

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 ユーティリティ 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)sp_tableoption (Transact-SQL)