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

89行目: 89行目:
  GO
  GO
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
== エラーハンドリング ==
基本的なエラーハンドリングの設定を以下に示す。<br>
<br>
<syntaxhighlight lang="tsql">
BULK INSERT TargetTable
FROM 'C:\Data\source.txt'
WITH
(
    ERRORFILE = 'C:\Errors\error.txt',
    MAXERRORS = 10,
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
);
</syntaxhighlight>
<br>
* ERRORFILEオプション
*: エラーが発生した行の詳細情報を指定されたファイルに出力する。
*: このファイルには、エラーの発生した行番号、エラーの種類、具体的なエラーメッセージ等が記録される。
*: <br>
* MAXERRORSオプション (重要)
*: 許容するエラーの最大数を指定する。
*: この数を超えるとBULK INSERT処理全体が中止される。
*: 例えば、MAXERRORSオプションを10に設定した場合、11個目のエラーが発生した時点で処理が停止する。
*: <br>
* CHECK_CONSTRAINTSオプション
*: データの検証に関するエラーハンドリングの設定である。
*: このオプションをONに設定する場合、制約違反のチェックが行われる。
*: ただし、パフォーマンスへの影響があるため、データの信頼性が確保されている場合はOFFにする。
*: <br>
* KEEPNULLSオプション
*: 空の文字列をNULLとして扱うかどうかを制御する。
*: これにより、NULL制約に関連するエラーを適切に処理することができる。
<br>
また、詳細なエラー情報を取得する場合は、TRY-CATCHブロックを使用する。<br>
<syntaxhighlight lang="tsql">
BEGIN TRY
    BULK INSERT TargetTable
    FROM 'C:\Data\source.txt'
    WITH
    (
      ERRORFILE = 'C:\Errors\error.txt',
      MAXERRORS = 10
    );
END TRY
BEGIN CATCH
    SELECT
      ERROR_NUMBER() AS ErrorNumber,
      ERROR_MESSAGE() AS ErrorMessage,
      ERROR_SEVERITY() AS ErrorSeverity,
      ERROR_STATE() AS ErrorState;
END CATCH
</syntaxhighlight>
<br>
実務では、エラーファイルの内容を定期的に監視して、必要に応じて修正アクションを取ることが推奨される。<br>
エラーファイルには、以下に示すような情報が含まれる。<br>
* エラーが発生した行番号
* エラーの発生した列
* エラーの種類 (データ型の不一致、制約違反等)
* 具体的なエラーメッセージ
<br>
エラー発生時のロールバック動作についても理解が重要である。<br>
<code>BATCHSIZE</code>オプションを使用している場合、エラーが発生したバッチのみがロールバックされて、それ以前に正常に取り込まれたデータは保持される。<br>
<br><br>
<br><br>