使用 THROW 发出警报

Chr*_*hee 2 sql-server alerts raiserror

在我看来,SQL THROW 缺少一个重要的功能,那就是当错误号记录在应用程序日志中时可以触发警报的RAISERROR能力。WITH LOG

有没有一种简单的方法可以做到这一点,但我却无法做到这一点,还是我仍然必须依赖更麻烦的RAISERRORSP sp_addmessage

我希望能够通过THROW在块中使用的警报来通知操作员CATCH

Aar*_*and 5

不,THROW缺少一些RAISERROR功能,包括WITH LOG. 当 SQL Server 2012 仍处于测试阶段时,我在博客中讨论了这一点,此后没有进行任何更改:

但是,您不需要使用sp_addmessage将消息发送RAISERROR到日志,除非您需要 50000 之外的自定义消息号:

DECLARE @s VARCHAR(32) = 'friend';
RAISERROR(N'What happened %s?', 19, 1, @s) WITH LOG;
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

再次阅读问题的实质内容,您可能确实想用它sp_addmessage来实现您的最终目标。我不应该尝试将日志记录与此分开(如果您记录了其他错误并想要不同的警报,50000 并没有多大帮助)。

将错误号放入由 引发的消息的文本RAISERROR中的示例:

BEGIN TRY
  SELECT 1/0;
END TRY
BEGIN CATCH
  DECLARE @err INT = ERROR_NUMBER();
  RAISERROR(N'What happened %d?', 19, 1, @err) WITH LOG;
END CATCH
Run Code Online (Sandbox Code Playgroud)