Sql-Server

使用 THROW 發出警報

  • December 26, 2019

在我看來,SQL THROW 缺少一個關鍵功能,RAISERROR那就是使用能力,WITH LOG以便在應用程序日誌中記錄錯誤號時可以觸發警報。有沒有一種簡單的方法可以讓我逃避,還是我仍然需要依賴更繁瑣的RAISERRORSP sp_addmessage?我希望能夠通過THROWCATCH塊中使用的警報通知操作員。

不,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;

結果:

在此處輸入圖像描述

再次閱讀問題的核心,您可能確實想用它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

引用自:https://dba.stackexchange.com/questions/77780