Job failure notifications is a common way to send notification when a SQL job fails. Setting up job notifications is fairly straight forward. However, sometimes there may be a need to do custom logic on when these notifications need to be sent. Since the job history is logged in the msdb database, we can query the tables and build out of the box solutions. One solution I had to do recently was to send notification email only if the job failed 5 successive times.
In order to do this, whenever the job fails, it should execute a step( part of the job) to check the last 4 run’s job final output (step id = 0) and if they all failed, send an email notification.
Below code shows how this can be done.
Declare @JobID uniqueidentifier SET @jobID = CONVERT(uniqueidentifier,$(ESCAPE_SQUOTE(JOBID))) IF ( SELECT MAX(run_status) FROM (SELECT A.run_status FROM Msdb.dbo.sysjobhistory A INNER JOIN Msdb.dbo.sysjobs B ON A. Job_id=b.job_id WHERE step_id=0 AND B.Job_ID = @jobID ORDER BY A.instance_id DESC OFFSET 0 ROWS FETCH First 4 ROWS ONLY) A)= 0 BEGIN EXEC msdb.dbo.sp_send_dbmail @profile_name = '<<SQLMailProfile>>', @recipients = 'email@example.com', @body = '<<email body>>', @subject = '<<email subject>>' ; END