BULK INSERT (Transact-SQL)

 

適用対象:○SQL Server (2008 以降)○Azure SQL DatabaseXAzure SQL Data Warehouse XParallel Data Warehouse

SQL Server で、ユーザーが指定した形式で、データベース テーブルまたはビューにデータ ファイルをインポートします。

Topic link icon Transact-SQL 構文表記規則

  
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' ]   
    )]   

データベース名
指定のテーブルまたはビューが含まれているデータベース名を指定します。 指定しない場合、現在のデータベースが使用されます。

schema_name
テーブルまたはビューのスキーマの名前を指定します。 schema_name一括インポート操作を実行するユーザーの既定のスキーマは、指定したテーブルまたはビューのスキーマの場合は省略可能です。 場合スキーマが指定されていない、一括インポート操作を実行するユーザーの既定のスキーマが、指定したテーブルまたはビューと異なるSQL Server返さ、エラー メッセージと、一括インポート操作は取り消されます。

table_name
データの一括インポート先のテーブル名またはビュー名を指定します。 指定できるビューは、すべての列が同じベース テーブルを参照するビューだけです。 ビューには、データを読み込むのための制限の詳細については、次を参照してください。 INSERT (TRANSACT-SQL)します。

' data_file '
指定のテーブルまたはビューにインポートするデータが含まれているデータ ファイルの完全なパスを指定します。 BULK INSERT を使用して、ディスク (ネットワーク、フロッピー ディスク、ハード ディスクなど) からデータをインポートすることができます。

data_fileをサーバーから有効なパスを指定する必要がありますSQL Serverが実行されています。 場合data_fileリモートは、ファイル、汎用名前付け規則 (UNC) 名を指定します。 A UNC name has the form \\Systemname\ShareName\Path\FileName. たとえば、 \\SystemX\DiskZ\Sales\update.txtのようにします。
適用対象: SQL Server vNext CTP 1.1.
始まるSQL Server vNextCTP1.1、data_file は、Azure blob ストレージであることができます。

' data_source_name '
適用対象: SQL Server vNext CTP 1.1.
名前付きの外部データ ソースは、インポートするファイルの Azure Blob ストレージの場所を指しています。 使用して、外部データ ソースを作成する必要があります、TYPE = BLOB_STORAGEオプションで追加されたSQL Server vNextCTP 1.1 です。 詳細については、次を参照してください。 CREATE EXTERNAL DATA SOURCEします。

BATCHSIZE ** = ** batch_size
1 つのバッチに含まれている行の数を指定します。 それぞれのバッチは、1 回のトランザクションでサーバーにコピーされます。 コピーに失敗した場合、SQL Server では各バッチのトランザクションがコミットまたはロールバックされます。 既定では、指定のデータ ファイル内にあるすべてのデータが&1; つのバッチになります。 パフォーマンスに関する考慮事項については、後の「解説」を参照してください。

CHECK_CONSTRAINTS
一括インポート操作中、対象テーブルまたはビューに対するすべての制約を検証します。 CHECK_CONSTRAINTS オプションを指定しない場合、CHECK 制約および FOREIGN KEY 制約は無視され、操作の後でテーブルの制約は信頼されていないものとしてマークされます。

System_CAPS_ICON_note.jpg メモ


UNIQUE および PRIMARY KEY 制約は常に適用します。 NOT NULL 制約で定義された文字型列にインポートする場合、テキスト ファイルに値がなければ BULK INSERT は空白文字列を挿入します。

ある時点で、テーブル全体の制約を確認する必要があります。 一括インポート操作の実行時にテーブルが空でなかった場合は、制約の再検証を行うと、追加データに CHECK 制約を適用するよりもコストがかかる可能性があります。

入力データに制約違反の行が含まれている場合などは、制約を無効 (既定の動作) にできます。 CHECK 制約を無効になっているには、データをインポートし、使用することができますTransact-SQL無効なデータを削除するステートメントです。

System_CAPS_ICON_note.jpg メモ


MAXERRORS オプションは制約チェックには適用されません。

CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }
データ ファイル内のデータのコード ページを指定します。 CODEPAGE は、データに含まれる場合にのみ該当charvarchar、またはテキストよりも大きい文字値を持つ列127またはより小さい32します。

System_CAPS_ICON_note.jpg メモ


Microsoft内の各列の照合順序名を指定することをお勧め、フォーマットファイルします。

CODEPAGE の値Description
ACP列のcharvarchar、またはテキストデータ型に変換されて、 ANSI / Microsoft Windows コード ページ (ISO 1252) をSQL Serverコード ページ。
OEM (既定値)列のcharvarchar、またはテキストシステムの OEM コード ページからのデータ型が変換される、SQL Serverコード ページ。
RAW1 つのコード ページから別のコード ページへの変換は行われません。このオプションを使用すると、最も高速に操作を完了できます。
code_page850 など、特定のコード ページ番号を指定します。

****重要な* * **より前のバージョンSQL Server 2016コード ページ 65001 (utf-8 エンコード) をサポートしていません。

DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' }
BULK INSERT で、指定したデータ ファイルの型の値に基づいてインポート操作を実行します。

DATAFILETYPE の値すべてのデータが示す形式
char (既定値)文字形式。

詳細については、「文字形式を使用したデータのインポートまたはエクスポート (SQL Server)」をご覧ください。
ネイティブネイティブ (データベース) データ型。 データの一括インポートして、ネイティブ データ ファイルを作成SQL Serverを使用して、 bcpユーティリティです。

ネイティブ値を使用すると、char 型の値を使用するよりもパフォーマンスが向上します。

詳細については、「ネイティブ形式を使用したデータのインポートまたはエクスポート (SQL Server)」をご覧ください。
widecharUnicode 文字。

詳細については、「Unicode 文字形式を使用したデータのインポートまたはエクスポート (SQL Server)」をご覧ください。
widenativeネイティブ (データベース) データ型の場合を除きcharvarchar、およびテキストデータが Unicode として格納されている列。 作成、 widenativeデータ ファイルからのデータの一括インポートをSQL Serverを使用して、 bcpユーティリティです。

 Widenative値を提供する高パフォーマンス代わりwidecharします。 データ ファイルが含まれている場合ANSI指定拡張文字、 widenativeします。

詳細については、「Unicode ネイティブ形式を使用したデータのインポートまたはエクスポート (SQL Server)」をご覧ください。

ERRORFILE ='file_name'
形式エラーがあり、OLE DB 行セットに変換できない行を収集するときに使用するファイルを指定します。 該当する行は、データ ファイルからこのエラー ファイルに "そのまま" コピーされます。

このエラー ファイルは、コマンドが実行されたときに作成されます。 ファイルが既に存在する場合はエラーが発生し、 拡張子 .ERROR.txt の制御ファイルが作成されます。 このファイルにはエラー ファイルの各行の参照と、エラーの診断が含まれています。 エラーが修正されるとすぐ、データは読み込み可能になります。
適用対象: SQL Server vNext CTP 1.1. 始まるSQL Server vNext、 error_file_path Azure blob ストレージであることができます。

' errorfile_data_source_name'
適用対象: SQL Server vNext CTP 1.1. 名前付きの外部データ ソースは、エラーを含むファイルのインポート中に見つかったエラーの Azure Blob ストレージの場所を指しています。 使用して、外部データ ソースを作成する必要があります、TYPE = BLOB_STORAGEオプションで追加されたSQL Server vNextCTP 1.1 です。 詳細については、次を参照してください。 CREATE EXTERNAL DATA SOURCEします。

FIRSTROW ** = ** first_row
読み込み開始行の行番号を指定します。 既定値は、指定されたデータ ファイルの先頭行です。 FIRSTROW は 1 から始まります。

System_CAPS_ICON_note.jpg メモ


FIRSTROW 属性は、列ヘッダーのスキップを目的としたものではありません。 ヘッダーのスキップは、BULK INSERT ステートメントではサポートされません。 行をスキップした場合、SQL Server データベース エンジンではフィールド ターミネータのみが調べられます。スキップした行のフィールドに含まれているデータの有効性は確認されません。

FIRE_TRIGGERS
一括読み込みの操作中に、インポート先のテーブルで定義されている挿入トリガーを実行します。 対象テーブルで INSERT 操作にトリガーが定義されている場合、そのトリガーは完了した各バッチに対して実行されます。

FIRE_TRIGGERS が指定されていない場合、挿入トリガーは実行されません。

FORMATFILE_DATASOURCE ** = ** 'data_source_name'
適用対象: SQL Server vNext 1.1 です。
名前付きの外部データ ソースは、インポートされたデータのスキーマを定義するフォーマット ファイルの Azure Blob ストレージの場所を指しています。 使用して、外部データ ソースを作成する必要があります、TYPE = BLOB_STORAGEオプションで追加されたSQL Server vNextCTP 1.1 です。 詳細については、次を参照してください。 CREATE EXTERNAL DATA SOURCEします。

KEEPIDENTITY
インポートしたデータ ファイルの ID 値 (複数可) を ID 列に使用することを指定します。 この列の id 値が検証がインポートされない KEEPIDENTITY が指定されていない場合、SQL Serverテーブル作成時に指定されたシードと増分値に基づいて一意の値を自動的に割り当てます。 データ ファイルにテーブルまたはビューの id 列の値が含まれていない場合は、フォーマット ファイルを使用して、テーブルまたはビュー内の id 列が、データをインポートするときにスキップすることを指定するにはSQL Server列の一意の値を自動的に割り当てます。 詳細については、「DBCC CHECKIDENT (Transact-SQL)」をご覧ください。

詳細については、保持するかを参照してください。 識別値を参照してください保持の Id 値とデータの一括インポート (SQL Server)します。

KEEPNULLS
一括インポート操作時、空の列が挿入される場合は NULL 値が保持されます。その列の既定値は格納されません。 詳細については、「一括インポート中の NULL の保持または既定値の使用 (SQL Server)」をご覧ください。

KILOBYTES_PER_BATCH ** = ** kilobytes_per_batch
バッチごとのデータのキロバイト (KB) のおおよその数を指定kilobytes_per_batchします。 KILOBYTES_PER_BATCH の既定値はありません。 パフォーマンスに関する考慮事項については、後の「解説」を参照してください。

LASTROW=last_row
読み込み終了行の行番号を指定します。 既定値は 0 で、これは指定のデータ ファイルの最終行を表します。

MAXERRORS ** = ** max_errors
一括インポート操作時に許容されるデータの構文エラーの最大数を指定します。この最大数に達すると、操作は取り消されます。 一括インポート操作でインポートできない行は無視され、それぞれ&1; つのエラーとしてカウントされます。 場合max_errorsが指定されていない、既定値は 10 です。

System_CAPS_ICON_note.jpg メモ


MAX_ERRORS オプションは、制約チェックや変換には適用されませんmoneybigintデータ型。

順序 ({[ASC |DESC ] } [ ,...n ] )
データ ファイル内のデータの並べ替え方法を指定します。 インポートするデータをテーブル上のクラスター化インデックスに従って並べ替えると、一括インポートのパフォーマンスが向上します。 データ ファイルが異なる順序で並んでいる場合、つまりクラスター化インデックス キーの順序以外の順で並んでいるか、テーブルにクラスター化インデックスが存在しない場合、ORDER 句は無視されます。 指定する列の名前は、インポート先のテーブル内で有効な列の名前であることが必要です。 既定では、一括挿入操作はデータ ファイルが並べ替えられていないことを前提に実行されます。 最適な一括インポートのため、SQL Server では、インポートするデータが並べ替えられているかどうかも検証されます。

n
複数の列を指定できることを示すプレースホルダーです。

ROWS_PER_BATCH ** = ** rows_per_batch
データ ファイル内のデータの行の概数を示します。

既定では、データ ファイル内のすべてのデータは単一のトランザクションとしてサーバーに送られ、バッチ内の行数はクエリ オプティマイザーには通知されません。 ROWS_PER_BATCH を値 > 0 で指定した場合、サーバーでは一括インポート操作の最適化にこの値が使用されます。 ROWS_PER_BATCH に指定する値は、実際の行数とほぼ同じにする必要があります。 パフォーマンスに関する考慮事項については、後の「解説」を参照してください。

TABLOCK
一括インポート操作中にテーブル レベルのロックを取得します。 テーブルにインデックスがなく、TABLOCK を指定した場合は、複数のクライアントで同時に&1; つのテーブルを読み込むことができます。 既定では、ロック動作はテーブル オプション table lock on bulk load によって決定されます。 一括インポート操作中にロックを維持すると、テーブル ロックの競合が少なくなるので、場合によってはパフォーマンスが大幅に向上します。 パフォーマンスに関する考慮事項については、後の「解説」を参照してください。

列ストア インデックスを示します。 複数の行セットに内部的に分かれているためには、ロック動作は異なります。 各スレッドは、同時実行データ読み込みのセッションを使用した並列のデータの読み込みを許可する、行セットで X ロックを実行することで、それぞれの行セットに排他的にデータを読み込みます。 TABLOCK オプションを使用するには、他の同時実行スレッドを同時にデータを読み込むようにする (従来の行セットの BU ロック) とは異なり、テーブルに X ロックを実行するスレッドが発生します。

入力ファイル形式のオプション

FORMAT = 'CSV'
適用対象: SQL Server vNext CTP 1.1.
準拠するコンマ区切り値ファイルを指定します、 RFC 4180標準です。

FIELDQUOTE ** = ** 'field_quote'
適用対象: SQL Server vNext CTP 1.1.
CSV ファイル内の引用符文字として使用される文字を指定します。 指定されていない場合で定義されている、引用符文字として引用符文字 (") を使用、 RFC 4180標準です。

FORMATFILE ='format_file_path'
フォーマット ファイルの完全パスを指定します。 フォーマット ファイルを使用して作成、格納された応答を含むデータ ファイルの説明、 bcp同じテーブルまたはビュー上のユーティリティです。 フォーマット ファイルは次の場合に使用します。

  • データ ファイルに含まれる列の数が、テーブルまたはビューより多い、または少ない。

  • 列の順序が異なる。

  • 列の区切り記号が異なる。

  • データ形式に他に異なる点がある。 通常、フォーマット ファイルを使用して作成、 bcpユーティリティおよび必要に応じて、テキスト エディターで修正します。 詳細については、「 bcp Utility」を参照してください。

適用対象: SQL Server vNext CTP 1.1.
始まるSQL Server vNextCTP 1.1、format_file_path は、Azure blob ストレージであることができます。

FIELDTERMINATOR ='field_terminator'
使用されるフィールド ターミネータを指定しますcharwidecharデータ ファイル。 既定のフィールド ターミネータは \t (タブ文字) です。 詳細については、「フィールド ターミネータと行ターミネータの指定 (SQL Server)」をご覧ください。

ROWTERMINATOR ='row_terminator'
使用される行ターミネータを指定しますcharwidecharデータ ファイル。 既定の行ターミネータは\r\n (改行文字)。 詳細については、「フィールド ターミネータと行ターミネータの指定 (SQL Server)」をご覧ください。

BULK INSERT によって、ファイルから読み込んだデータに対して厳密なデータ検証とデータ チェックが実行されるので、無効なデータを使用して既存のスクリプトを実行すると、スクリプトは失敗する可能性があります。 たとえば、BULK INSERT では次の検証が行われます。

  • ネイティブ表記floatまたは実際データ型が無効です。

  • Unicode データが偶数バイト長かどうか。

文字列から&10; 進数へのデータ型変換

BULK INSERT で使用される&10; 進数の文字列データ型変換と同じ規則に従います、 Transact-SQL 変換関数で、科学的表記法を使用して数値を表す文字列を拒否します。 したがって、BULK INSERT を実行するときに、そのような文字列が無効な値として評価され、変換エラーが報告されます。

この動作を回避するには、一括インポートの科学的表記法、フォーマット ファイルを使用float&10; 進数の列へのデータです。 フォーマット ファイルで明示的に記述する列として実際またはfloatデータ。 これらのデータ型の詳細については、次を参照してください。 float 型と real (TRANSACT-SQL)します。

System_CAPS_ICON_note.jpg メモ


フォーマット ファイル実際データとして、 SQLFLT4データ型とfloatデータとして、 SQLFLT8データ型。 XML 以外のフォーマット ファイルについては、次を参照してください。 bcp (SQL Server) を使用して、ファイル ストレージ型を指定します。

科学的表記法を使用した数値をインポートする例

この例では、次のテーブルを使用します。

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

一括をユーザーがデータのインポート、t_floatテーブルです。 データ ファイル C:\t_float-c.dat には、科学的表記法が含まれています。 floatデータなどの。

8.0000000000000002E-28.0000000000000002E-2  

しかし、テーブルの&2; 番目の列 t_floatc2 データ型を使用しているので、このデータを BULK INSERT によって decimal に直接インポートすることはできません。 そのため、フォーマット ファイルが必要です。 フォーマット ファイルは、科学的表記法をマップする必要がありますfloat列の&10; 進数形式にデータをc2します。

次のフォーマット ファイルの使用方法、SQLFLT8データ型に&2; 番目のデータ フィールドを&2; 番目の列にマップします。

<?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-SQL ステートメントを実行します。

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

SQLXML ドキュメントの一括エクスポートまたは一括インポート用のデータ型

SQLXML データを一括エクスポートまたは一括インポートするには、フォーマット ファイルで次のいずれかのデータ型を使用します。

データ型結果
SQLCHAR または SQLVARCHARデータは、クライアント コード ページまたは照合順序で暗黙的に指定されるコード ページで送られます。 効果は DATAFILETYPE を指定すると同じ= 'char'フォーマット ファイルを指定しないでします。
SQLNCHAR または SQLNVARCHARデータは Unicode として送られます。 効果は DATAFILETYPE を指定すると同じ= 'widechar'フォーマット ファイルを指定しないでします。
SQLBINARY または SQLVARBINデータは変換なしで送られます。

BULK INSERT ステートメント、INSERT ... 選択*openrowset (bulk) からステートメントおよびbcpコマンドを参照してくださいデータのエクスポート (SQL Server) の一括インポートおよびです。

データの一括インポートの準備の詳細については、次を参照してください。データを一括エクスポートまたはインポート (SQL Server) を準備するです。

BULK INSERT ステートメントは、テーブルまたはビューにデータをインポートするために、ユーザー定義のトランザクション内で実行できます。 必要に応じて、一括インポート データの複数の一致を使用するために、トランザクションは BULK INSERT ステートメントで BATCHSIZE 句を指定できます。 複数バッチ トランザクションがロールバックされた場合、トランザクションに送信されるすべてのバッチSQL Serverはロールバックされます。

CSV ファイルからのデータのインポート

始まるSQL Server vNextCTP 1.1、一括挿入は、CSV 形式をサポートしています。
前にSQL Server vNextCTP 1.1 ではコンマ区切り値 (CSV) ファイルはサポートされていないSQL Server一括インポート操作します。 ただし、場合によっては、 SQL Serverに対してデータを一括インポートする際、CSV ファイルをデータ ファイルとして使用できます。 CSV データ ファイルからデータをインポートするための要件については、次を参照してください。データを一括エクスポートまたはインポート (SQL Server) を準備するです。

一括インポートによって実行される行挿入操作がトランザクション ログに記録される条件について詳しくは、「一括インポートで最小ログ記録を行うための前提条件」をご覧ください。

BULK INSERT でフォーマット ファイルを使用する場合、指定できるフィールド数は 1,024 個までです。 これは、テーブルに許容される最大列数と同じです。 1,024 個を超えるフィールドが含まれるデータ ファイルで BULK INSERT を使用すると、BULK INSERT によってエラー 4822 が生成されます。 Bcp ユーティリティにないがこの制限は、そのため、1,024 を超えるフィールドを含むデータ ファイルの次のように使用します。、 bcpコマンドです。

1 つのバッチでフラッシュされるページの数が内部しきい値を超えると、バッチのコミット時にフラッシュするページを特定するためにバッファー プールのフル スキャンが行われる可能性があります。 フル スキャンが行われると、一括インポートのパフォーマンスが低下します。 この内部しきい値の問題は、大きなバッファー プールと遅い I/O サブシステムの組み合わせでも発生します。 大規模なコンピューターでバッファー オーバーフローを防ぐには、TABLOCK ヒントを使用しないようにするか (一括インポートの最適化は行われなくなります)、バッチ サイズを小さくします (一括インポートの最適化は引き続き行われます)。

コンピューターはそれぞれ異なるため、実際のデータでさまざまなバッチ サイズを試して最適な値を見つけるようにすることをお勧めします。

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

ユーザーが SQL Server ログインを使用する場合は、 SQL Server プロセス アカウントのセキュリティ プロファイルが使用されます。 SQL Server 認証を使用したログインは、データベース エンジン以外では認証できません。 そのため、SQL Server 認証を使用したログインによって BULK INSERT コマンドが開始されると、SQL Server プロセス アカウント (SQL Server データベース エンジン サービスで使用されるアカウント) のセキュリティ コンテキストを使用してデータへの接続が行われます。 ソース データを正しく読み取るには、SQL Server データベース エンジンで使用されるアカウントに対して、ソース データへのアクセス権を付与する必要があります。これに対して、SQL Server ユーザーが Windows 認証を使用してログインした場合、そのユーザーは SQL Server プロセスのセキュリティ プロファイルに関係なく、そのユーザー アカウントでアクセス可能なファイルのみを読み取ることができます。

使用して BULK INSERT ステートメントを実行するときにsqlcmdまたはosql、1 台のコンピューターからデータを挿入SQL Server別のコンピューターを指定して、 data_file UNC パスを使用して 3 番目のコンピューターに 4861 エラーが発生する可能性があります。

このエラーを解決するには、SQL Server認証を指定し、SQL Serverログインのセキュリティ プロファイルを使用して、SQL Serverプロセス アカウント、またはセキュリティ アカウントの委任を有効にする Windows を構成します。 ユーザー アカウントの信頼性を委任の対象として有効にする方法の詳細については、Windows ヘルプを参照してください。

このおよび BULK INSERT を使用するためのセキュリティの考慮事項の詳細については、次を参照してくださいを使用して BULK INSERT または openrowset (bulk) でデータを一括インポート。(SQL Server).

Permissions

INSERT および ADMINISTER BULK OPERATIONS 権限が必要です。 ただし次の操作を&1; つ以上行う場合は、さらに ALTER TABLE 権限が必要になります。

  • 制約が存在する場合に、CHECK_CONSTRAINTS オプションを指定しない。

    System_CAPS_ICON_note.jpg メモ


    制約の無効化は既定の動作です。 制約を明示的に検証するには、CHECK_CONSTRAINTS オプションを使用します。

  • トリガーが存在する場合に、FIRE_TRIGGER オプションを指定しない。

    System_CAPS_ICON_note.jpg メモ


    既定では、トリガーは起動しません。 トリガーを明示的に起動するには、FIRE_TRIGGERS オプションを使用します。

  • KEEPIDENTITY オプションを使用して、データ ファイルから ID 値をインポートする。

A. ファイルからのデータのインポートにパイプを使用する

次の例に、注文明細情報をインポートする、 AdventureWorks2012.Sales.SalesOrderDetail 、パイプを使用して、指定されたデータ ファイルからのテーブル (|) をフィールド ターミネータと|\n行ターミネータとして。

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

B. FIRE_TRIGGERS 引数を使用する

次の例では、FIRE_TRIGGERS 引数を指定します。

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

C. 行ターミネータとしてライン フィードを使用する

次の例では、UNIX 出力などのように、ライン フィードを行ターミネータとして使用するファイルをインポートします。

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

System_CAPS_ICON_note.jpg メモ


Microsoft Windows がテキスト ファイルを処理する方法により(\nに自動的に置き換えられます\r\n)します。

D. コード ページの指定

次の例では、コード ページを指定する方法を示します。

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

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

次の例では、CSV ファイルを指定する方法を示します。

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

F. Azure blob ストレージ内のファイルからデータをインポートします。

次の例は、Azure blob ストレージの場所である外部データ ソースとして構成されている csv ファイルからデータを読み込む方法を示します。 これには、共有アクセス署名を使用してデータベース スコープ資格情報が必要です。

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

完了BULK INSERT資格情報と外部データ ソースの構成を含む例を参照してください例として一括へのアクセスを Azure Blob ストレージにデータします。

その他の例

その他のBULK INSERTの例は、次のトピックで説明します。

データ (SQL Server) の一括インポートとエクスポート
bcp ユーティリティ
インポートまたはエクスポート データ (SQL Server) 用のフォーマット ファイル
挿入 (TRANSACT-SQL)
OPENROWSET (TRANSACT-SQL)
一括エクスポートまたはインポート (SQL Server) データを準備します。
sp_tableoption (TRANSACT-SQL)

コミュニティの追加

追加
表示: