级别 16 的 Throw 和 RaiseError 不会导致发生警报

Yur*_*han 1 sql-server sql-server-2012 sql-server-agent alerts

下一个警报已创建:

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
Run Code Online (Sandbox Code Playgroud)

我希望下一个代码会导致它发生:

THROW 51000, 'The record does not exist.', 1;
Run Code Online (Sandbox Code Playgroud)

或者下一个代码:

 RAISERROR ('Error raised.', 16,  1);
Run Code Online (Sandbox Code Playgroud)

系统消息不包含错误消息:

SELECT *
FROM sys.messages  
WHERE language_id = 1033 
and severity>=16
ORDER BY severity asc, message_id asc
Run Code Online (Sandbox Code Playgroud)

我在历史选项卡中也没有事件: 在此处输入图片说明


我错过了什么?

Mar*_*son 6

阅读有关sp_add_alert的 BOL 文章

[ @severity = ] 严重性- 定义警报的严重性级别(从 1 到 25)。存储在 sysmessages 表中的任何 SQL Server 消息以指定的严重性发送到 Microsoft Windows 应用程序日志,都会导致发送警报。Severity 为 int,默认为 0。如果使用 message_id 定义警报,则 Severity 必须为 0。

如果要为用户定义的错误消息添加警报,则需要sys.messages使用sp_addmessage将错误消息添加到表中

   EXEC sp_addmessage @msgnum= 90210, @severity=16, @msgtext='Error raised.',  @lang= 1033;
Run Code Online (Sandbox Code Playgroud)

要真正提高错误警报,您必须注意一些注意事项(认真...阅读在线指南...这就是我在这里所做的一切...

在这些情况下,SQL Server 和 SQL Server 应用程序生成的错误/消息会发送到 Windows 应用程序日志并因此引发警报:
• 严重性 19 或更高的 sys.messages 错误

• 任何使用 WITH LOG 语法调用的 RAISERROR 语句

• 使用 sp_altermessage 修改或创建的任何 sys.messages 错误

• 使用 xp_logevent 记录的任何事件

因此RAISERROR,默认情况下,严重性为 16 的错误不仅会提醒您,您还需要在WITH LOG其后添加。

RAISERROR(@ErrorMessage, @ErrorSeverity, 1) WITH LOG
Run Code Online (Sandbox Code Playgroud)