我通过SQL Server代理程序安排了一个作业,该代理程序运行一个运行其他一些sprocs的sproc.每个sproc看起来像这样:
BEGIN TRY
-- do stuff
END TRY
BEGIN CATCH
DECLARE @errorMessage varchar(4000)
DECLARE @procName varchar(255)
SELECT @errorMessage = error_message()
SELECT @procName = OBJECT_NAME(@@PROCID)
RAISERROR('%s threw an exception: %s', 16, 1, @procName, @errorMessage)
END CATCH
Run Code Online (Sandbox Code Playgroud)
这一切都很好 - 错误被提升并被抛到堆栈,生活是美好的.但是,我的RAISERROR调用似乎不会导致作业失败 - 我将设置为接收电子邮件通知"当作业失败时",但从未收到.电子邮件通知正在运行,因为如果我将通知更改为"作业成功时",我将收到电子邮件.我应该使用其他功能代替RAISERROR吗?
小智 10
在try块中引发错误,TRY块中的严重性在11-19之间,然后在catch块中重新引发相同的错误.这将使步骤失败..
来自msdn的代码片段
BEGIN TRY
-- RAISERROR with severity 11-19 will cause execution to
-- jump to the CATCH block.
RAISERROR ('Error raised in TRY block.', -- Message text.
16, -- Severity.
1 -- State.
);
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
-- Use RAISERROR inside the CATCH block to return error
-- information about the original error that caused
-- execution to jump to the CATCH block.
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24492 次 |
| 最近记录: |