На самом деле я работаю над SP в SQL 2005. Используя SP, я создаю задание и планирую его на определенное время. Выполнение этих заданий занимает от 5 до 10 минут, поскольку база данных очень велика. Но я не знаю, как проверить статус задания. Я хочу знать, было ли оно успешно завершено или произошла ошибка при выполнении. В исключении я также возвращаю правильный код ошибки. Но я не знаю, где я могу проверить этот код ошибки.


Вот что я смог найти, возможно, это решит вашу проблему:
exec msdb.dbo.sp_help_jobactivity @job_id = (your job_id here)
Вы можете выполнить этот SP и поместить результат во временную таблицу и получить оттуда требуемый результат.
В противном случае взгляните на эти таблицы:
msdb.dbo.sysjobactivity
msdb.dbo.sysjobhistory
Выполните следующее, чтобы увидеть связь между этими таблицами.
exec sp_helptext sp_help_jobactivity
- Скопируйте в анализаторе запросов и отформатируйте его должным образом, чтобы вы могли легко его понять --Чтобы выполнить вашу задачу (задание) с помощью запроса exec msdb.dbo.sp_start_job @job_name = 'Job Name', @ server_name = имя сервера - После выполнения запроса, чтобы проверить, закончился он или нет Объявите @JobId как varchar (36) Выберите @JobId = job_id из sysjobs, где name = 'Your Job Name' Объявить @JobStatus как int set @JobStatus = -1 Хотя @JobStatus <= -1 Начинать - Обеспечьте временную задержку в соответствии с вашей работой выберите @JobStatus = isnull (run_status, -1) от sysjobactivity JA, sysjobhistory JH где JA.job_history_id = JH.instance_id и JA.job_id = @JobId Конец выберите @JobStatus
null = Бег 1 = Завершено успешно 0 = завершено с ошибкой
- Как только ваша работа будет завершена, вы получите результат
Получил код получше от здесь
Use msdb
go
select distinct j.Name as "Job Name", j.description as "Job Description", h.run_date as LastStatusDate,
case h.run_status
when 0 then 'Failed'
when 1 then 'Successful'
when 3 then 'Cancelled'
--when 4 then 'In Progress'
end as JobStatus
from sysJobHistory h, sysJobs j
where j.job_id = h.job_id and h.run_date =
(select max(hi.run_date) from sysJobHistory hi where h.job_id = hi.job_id)
order by 1
ВНИМАНИЕ: run_status из 4 (в процессе) не происходит (msdn.microsoft.com/en-us/library/ms174997.aspx)