phi*_*ile 7 sql-server-2008 sql-server
我有一个包含 6 个步骤的 SQL Server 作业。无论前四个步骤是否失败,都必须运行步骤 5 和 6,因此如果前四个作业失败,则将它们设置为跳到步骤 5。
但是,如果第 5 步和第 6 步成功,则整个工作被视为成功。我为作业失败设置了电子邮件通知,但如果前四个步骤中的任何一个由于整体作业被视为成功而失败,我将不会收到电子邮件。我希望这种情况发生。
将前四个步骤拆分为单独的工作并不理想,因为它们必须在第 5 步和第 6 步开始之前完成。
请任何人都可以给我建议来解决这个问题,以便:
非常感谢您的帮助。
Han*_*non 11
您可以为步骤 1-4 创建一个存储过程,错误处理会在失败时通过电子邮件通知您。
就像是:
CREATE PROCEDURE TestEmailOnFail
AS
BEGIN
BEGIN TRY
/*
Perform some action that might fail
*/
SELECT 0/0; --THIS WILL FAIL
END TRY
BEGIN CATCH
DECLARE @subject nvarchar(max) = 'Job Failure Notification';
DECLARE @body nvarchar(max) = 'TestEmailOnFail Job Failed'
+ CHAR(10) + CHAR(13) + 'Error Number: ' + CAST(ERROR_NUMBER() AS nvarchar(max))
+ CHAR(10) + CHAR(13) + 'Error Message: ' + ERROR_MESSAGE();
DECLARE @to nvarchar(max) = 'somebody@email.com';
DECLARE @profile_name sysname = 'SQLMailProfileName';
EXEC msdb.dbo.sp_send_dbmail @profile_name = @profile_name,
@recipients = @to, @subject = @subject, @body = @body;
END CATCH
END
Run Code Online (Sandbox Code Playgroud)
我刚刚使用我的 SQL 邮件配置文件和我的电子邮件地址对此进行了测试,并收到了以下电子邮件:
TestEmailOnFail Job Failed
Error Number: 8134
Error Message: Divide by zero error encountered.
Run Code Online (Sandbox Code Playgroud)
如果您需要知道哪个步骤失败了,您可能只想将逻辑放入每个步骤(类似于 Max 提出的)以在作业步骤逻辑中执行 TRY/CATCH,而不是构建 4 个处理程序步骤并使用作业脚手架。
归档时间: |
|
查看次数: |
29581 次 |
最近记录: |