BULK INSERT

Last-modified: 2024-01-15 (月) 08:50:18

使用条件

  • ファイル(複数行ある)をテーブルに一度に取込む時に威力を発揮する。
  • 使用にあたっては、事前に取込むファイルと同じレイアウトのテーブルが作られていること

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のことを見かけたことがないのは謎? (^^;

サイト内リンク