2026年1月20日火曜日

SQL Server PRINTとRAISERRORの使い方|エラー通知・デバッグ・ロギングの基本

SQLの動きを「見える化」!PRINTとRAISERRORを使ったデバッグ・エラー通知の基本

SQL Serverの開発や運用では、ストアドプロシージャやスクリプトの動作を 確認したり、エラー発生時にメッセージを出力したりする機会が多くあります。 その際によく使われるのがPRINTRAISERRORです。
この記事では、両者の違い・使い方・実務での活用パターンを 初心者にもわかりやすく解説します。

目次

PRINTとRAISERRORの違いを理解する

用途と出力先の違い

項目 PRINT RAISERROR
目的 メッセージの表示(デバッグ・進捗確認) エラー通知・例外発生
出力先 メッセージウィンドウ エラーメッセージ(TRY...CATCHで捕捉可)
処理の継続 続行される 重大度により中断または継続
主な用途 ログ表示・デバッグ出力 エラー制御・例外スロー

PRINTは単純な出力、RAISERRORは例外処理やログ制御に利用されます。

PRINT文の使い方と注意点

基本構文


PRINT '処理を開始します。';

変数を含む出力


DECLARE @Count INT = 10;
PRINT '件数:' + CAST(@Count AS NVARCHAR(10));

注意点

  • 出力文字数の上限は 8,000文字(nvarcharの場合4,000)
  • バッチ処理中は遅れて出力されることがある(即時性は低い)

進捗やデバッグログを出す程度にとどめるのが実務的です。

RAISERROR文の基本構文と使い方

基本構文


RAISERROR ('エラーメッセージ', 16, 1);

第1引数はメッセージ内容、第2引数は重大度、第3引数は状態番号です。

変数を利用する例


DECLARE @Name NVARCHAR(50) = 'Taro';
RAISERROR ('ユーザー %s が存在しません。', 16, 1, @Name);

フォーマット指定子(%s, %dなど)を利用できます。

RAISERRORの重大度とWITH句オプション

重大度レベル(Severity)

レベル 意味 動作
0〜10 情報/警告 処理は継続
11〜16 ユーザー定義エラー(一般的) TRY...CATCHで捕捉可能
17〜25 致命的エラー 接続が切断される可能性あり

WITH句のオプション


RAISERROR ('重要な警告', 16, 1) WITH NOWAIT;
  • NOWAIT: 即時出力
  • LOG: SQL Serverエラーログに記録
  • SETERROR: @@ERROR に値を設定

TRY...CATCHとの組み合わせとエラーログ出力

TRY...CATCHで例外を制御


BEGIN TRY
    -- 例:0除算エラー
    DECLARE @x INT = 1 / 0;
END TRY
BEGIN CATCH
    DECLARE @ErrMsg NVARCHAR(4000) = ERROR_MESSAGE();
    RAISERROR ('処理中にエラー: %s', 16, 1, @ErrMsg);
END CATCH;

エラーログへの記録例


RAISERROR ('致命的エラーが発生しました。', 20, 1) WITH LOG;

「WITH LOG」を付与すると、WindowsイベントログやSQL Serverエラーログにも記録されます。

PRINTとRAISERRORの使い分け方

用途 PRINT RAISERROR
進捗やデバッグ表示
エラー通知・ログ記録 ×
TRY...CATCH連携 ×
処理継続性 常に続行 重大度により中断

基本的には「確認用=PRINT」「制御・通知用=RAISERROR」と覚えましょう。

まとめと次のステップ

学んだ内容の整理

  • PRINTは開発・デバッグ向けの簡易出力。
  • RAISERRORはエラー制御・ログ出力に利用する。
  • TRY...CATCHと組み合わせることで柔軟なエラーハンドリングが可能。
  • WITH LOG / NOWAIT などのオプションで出力タイミングや保存先を制御できる。

参考リンク

SQL Server 解説用イメージ

0 件のコメント:

コメントを投稿