Imagine that you want multiple steps in one MSSQL agent job. Every step has to be executed (no matter what) and you will want to be informed if one of the steps failed.
First you need the guid of the job you are running.
SELECT TOP(1) job_id FROM msdb.dbo.sysjobhistory jh WHERE step_name = '<pick a step name from your job'
After this you can put a last step in you job with the following code:
Don’t forget to change the text <PUT YOUR JOB GUID HERE!> to the GUID you got from the last step.
SET QUOTED_IDENTIFIER ON;
DECLARE @errorMsg nvarchar(max);
SELECT
@errorMsg= 'The following steps failed, please investigate:' + LEFT(o.list, LEN(o.list)-1)
FROM (
SELECT
*
FROM
msdb.dbo.sysjobhistory jh
join msdb.dbo.sysjobactivity ja ON jh.job_id=ja.job_id
WHERE
run_status=0 --step failed
AND step_id != 0
AND jh.job_id = CONVERT(uniqueidentifier, '<PUT YOUR JOB GUID HERE!>')
AND convert(varchar(10),jh.run_date,112) = convert(varchar(10),getdate(),112)
order by instance_id -- this sort off ensures that we just pull information from the most recent job run
FOR XML PATH ('')
) o (list)
IF @errorMsg is null
print ' Everything looks good...'
ELSE
BEGIN
RAISERROR (@errorMsg, 16, 1)
END
Don’t forget to change the job steps so that all steps are going to the last step and the last step reports a success or a failure. Of course you also have to setup notification in the SQL Server Agent.


