web-dev-qa-db-ja.com

レベル16のスローとRaiserrorはアラームを発生させません

次のアラートが作成されました:

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

[履歴]タブにもイベントがありません: enter image description here


何が欠けていますか?

1
Yurii Hohan

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
5
Mark Sinkinson