📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

1行目: 1行目:
== 概要 ==
== 概要 ==
SQL Serverにおいて、ユーザが指定した形式でデータベーステーブルまたはビューにデータファイルをインポートしたい時がある。<br>
<code>BULK INSERT</code>文は、SQL Serverで大量のデータを高速にテーブルに取り込むための機能である。<br>
テキストファイルまたはCSVファイルをインポートする時、BULK INSERT文を使用する。<br><br>
通常のINSERT文と比較して、効率的にデータを取り込むことができる。<br>
<br>
<syntaxhighlight lang="tsql">
-- 使用例
BULK INSERT TargetTable
FROM 'C:\Data\source.txt'
WITH
(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
);
</syntaxhighlight>
<br>
重要な特徴として、BULK INSERT文はトランザクションログへの書き込みを最小限に抑えることで高速な処理を実現している。<br>
これは、大量データの取り込み時に大きな効果を発揮する。<br>
<br>
データソースとしては、カンマ区切り (CSV) や タブ区切り (TSV) 等の形式のテキストファイルが使用できる。<br>
<code>FIELDTERMINATOR</code>オプションは列の区切り文字、<code>ROWTERMINATOR</code>オプションは行の区切り文字を指定する。<br>
<br>
パフォーマンスに影響を与える重要な要素として、以下に示すような設定がある。<br>
<syntaxhighlight lang="tsql">
WITH
(
    BATCHSIZE = 1000,
    TABLOCK,
    CHECK_CONSTRAINTS = OFF,
    FIRE_TRIGGERS = OFF
)
</syntaxhighlight>
<br>
これらのオプションを適切に設定することにより、パフォーマンスを向上させることができる。<br>
特に、<code>TABLOCK</code>オプションは、テーブルレベルでのロックを取得することにより、行レベルのロックによるオーバーヘッドを避けることができる。<br>
<br>
<u>※注意</u><br>
<u>BULK INSERT文を使用する場合は、ファイルに対する適切なアクセス権限が必要となる。</u><br>
<u>また、データファイルの形式とテーブルのスキーマが正確に一致している必要がある。</u><br>
<br>
エラーハンドリングについては、<code>ERRORFILE</code>オプションを使用することにより、取り込みに失敗した行を別ファイルに出力して後から確認することができる。<br>
<syntaxhighlight lang="tsql">
WITH
(
    ERRORFILE = 'C:\Errors\error.txt',
    MAXERRORS = 10
)
</syntaxhighlight>
<br>
BULK INSERT文は、大量データの取り込みに非常に効果的なツールであるが、適切な設定と事前準備が重要となる。<br>
<br><br>


== BULK INSERTの例 ==
== BULK INSERTの例 ==