次のアラートが作成されました:
USE [msdb]
GO
/****** Object: Alert [Notify] Script Date: 09/09/2014 11:38:31 ******/
EXEC msdb.dbo.sp_add_alert @name=N'Notify',
@message_id=0,
@severity=16,
@enabled=1,
@delay_between_responses=0,
@include_event_description_in=0,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
次のコードが発生することを期待しています:
THROW 51000, 'The record does not exist.', 1;
または次のコード:
RAISERROR ('Error raised.', 16, 1);
システムメッセージにはエラーメッセージが含まれていません。
SELECT *
FROM sys.messages
WHERE language_id = 1033
and severity>=16
ORDER BY severity asc, message_id asc
[履歴]タブにもイベントがありません:
何が欠けていますか?
sp_add_alert に関するBOLの記事を読むことから
[@severity =] severity-アラートを定義する重大度レベル(1〜25)。 sysmessagesテーブルに保存されているSQL Serverメッセージが、指定された重大度でMicrosoft Windowsアプリケーションログに送信されると、アラートが送信されます。 severityはintであり、既定値は0です。message_idを使用してアラートを定義する場合、severityは0でなければなりません。
ユーザー定義のエラーメッセージのアラートを追加する場合は、 sp_addmessage を使用して、エラーメッセージをsys.messages
テーブルに追加する必要があります。
EXEC sp_addmessage @msgnum= 90210, @severity=16, @msgtext='Error raised.', @lang= 1033;
エラーのアラートを実際に発生させるには、注意が必要な注意点がいくつかあります(真剣に...オンラインガイドを読んでください...これが私がここで行っているすべてです... )
SQL ServerおよびSQL Serverアプリケーションによって生成されたエラー/メッセージがWindowsアプリケーションログに送信され、アラートが発生する可能性がある状況は次のとおりです。
•重大度19以上のsys.messagesエラー•WITH LOG構文で呼び出されたRAISERRORステートメント
•sp_altermessageを使用して変更または作成されたsys.messagesエラー
•xp_logeventを使用してログに記録されたイベント
したがって、重大度16のエラーのRAISERROR
は、デフォルトで警告を表示するだけでなく、その後にWITH LOG
を追加する必要があります。
RAISERROR(@ErrorMessage, @ErrorSeverity, 1) WITH LOG