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