使用条件
- ファイル(複数行ある)をテーブルに一度に取込む時に威力を発揮する。
- 使用にあたっては、事前に取込むファイルと同じレイアウトのテーブルが作られていること
SQL2017以降では、やり方が異なるようです。
注意点
- テーブルにインデックスをつけているとパフォーマンスがお幅に下がるので注意
9万行のテキストデータの取り込みに3分かかったていたのが,3秒に短縮された - インメモリのテーブルはインデックスが強制的につくので注意
インメモリDBは、大量データのBulkInsertの受け皿には向かない
通常のDBで受け取りインメモリにデータを渡してから使うのは問題ない。
構文
BULK INSERT テーブル名 FROM 'ファイル名' (ファイル名を'で囲む) WITH ( DATAFILETYPE = 'char' , FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n' )
ヘッダーをスキップする(2行目から取込む)
BULK INSERT テーブル名 FROM 'ファイル名' (ファイル名を'で囲む) WITH ( DATAFILETYPE = 'char' , FIELDTERMINATOR = ',' , FIRSTROW = 2, ROWTERMINATOR = '\n' )
例
カンマ区切りのC:\USER.CSVファイルをTableNameテーブルに挿入する。
BULK INSERT TableName FROM 'C:\USER.CSV' WITH ( DATAFILETYPE = 'char' , FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n' )
参考
考察
- 40万行あるファイルをテーブルに一行づつINSERT文するやり方で約10分かかった処理が、BULK INSERTにかえたら約10秒程度に大幅に短縮した
- こんなに便利なのにデータベース関係の書籍でBULK INSERTのことを見かけたことがないのは謎?