Вы можете добавить дополнительный шаг задания, чтобы запросить у таблиц msdb
шаги, которые не удалось выполнить.После этого хранимую процедуру sp_send_dbmail
можно использовать для отправки электронного письма с ошибками, если они возникли.Столбец run_date
в SYSJOBHISTORY
является столбцом типа int, поэтому дата будет иметь формат YYYYMMDD.Фильтр, приведенный ниже в столбце run_status
, будет применяться к отдельным шагам независимо от общего результата задания, где 0 означает состояние «не выполнено».
DECLARE @JobExecutionDate INT
--current date
SET @JobExecutionDate = CAST(CONVERT(VARCHAR(8),GETDATE(),112) AS INT)
--check if there were any errors first
IF EXISTS (SELECT h.instance_id
FROM MSDB.DBO.SYSJOBHISTORY h
INNER JOIN MSDB.DBO.SYSJOBS j ON h.job_id = j.job_id
INNER JOIN MSDB.DBO.SYSJOBSTEPS s ON j.job_id = s.job_id AND h.step_id = s.step_id
WHERE h.run_status = 0 AND h.run_date = @JobExecutionDate AND j.name = 'YourJobName')
BEGIN
DECLARE @Title VARCHAR(50)
SET @Title = CONCAT(CONVERT(VARCHAR(12), CAST(GETDATE() AS DATE), 109), ' Job Error Email')
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Your Database Mail Profile',
@recipients = 'ExampleEmail@Domain.com',
@query = 'SELECT j.[name] AS JobName,
s.step_name AS StepName,
h.run_date AS RunDate,
h.run_time AS RunTime,
h.sql_severity As ErrorSeverity,
h.message AS ErrorMessage
FROM MSDB.DBO.SYSJOBHISTORY h
INNER JOIN MSDB.DBO.SYSJOBS j ON h.job_id = j.job_id
INNER JOIN MSDB.DBO.SYSJOBSTEPS s ON j.job_id = s.job_id AND h.step_id = s.step_id
WHERE h.run_status = 0 AND h.run_date = CAST(CONVERT(VARCHAR(8),GETDATE(),112) AS INT) AND j.name = ''YourJobName''
',
@query_result_no_padding = 1,
@subject = @Title ;
END