Мой первый ответ был, что вы могли бы использовать цикл, как указано выше, но проверить таблицы истории работы в MSDB ждать предшествующая работа, чтобы закончить:
select sj.name as job_name
from msdb.dbo.sysjobhistory sjh
inner join msdb.dbo.sysjobs_view sj on sj.job_id = sjh.job_id
where sjh.step_id = 0 --Job outcome
and sjh.run_status = 4 --In progress
Спасибо, Andomar, для допроса этого. Оказывается, sysjobhistory обновляется только после завершения первого шага. Только идиот мог бы предположить, что если одно значение run_status «In progress», таблица должна быть обновлена при запуске шага! Я искал вокруг, и это, кажется, сложная проблема. Где-то SQL знает, что происходит, но он не раскрывает информацию очень хорошо.
Кажется, вам нужно выбирать между мили сложного кода или использованием недокументированной хранимой процедуры. Вы можете легко найти мили ответов на код - их несколько - по Googling для sysjobhistory. Лично я предпочитаю подход xp:
create table #xp_results(
job_id uniqueidentifier not null,
last_run_date int not null,
last_run_time int not null,
next_run_date int not null,
next_run_time int not null,
next_run_schedule_id int not null,
requested_to_run int not null, -- bool
request_source int not null,
request_source_id sysname collate database_default null,
running int not null, -- bool
current_step int not null,
current_retry_attempt int not null,
job_state int not null)
insert #xp_results exec master.dbo.xp_sqlagent_enum_jobs @is_sysadmin = 1, @job_owner = ''
select sj.name
from #xp_results xpr
inner join msdb.dbo.sysjobs_view sj on sj.job_id = xpr.job_id
where running = 1
drop table #xp_results
Я тестировал это, и он действительно работает. Возможно, это рискованно использовать этот xp, но это то, что использует монитор активности работы - я запускал его с включенным профилировщиком, поэтому, если он изменится, он, вероятно, предоставит другой способ поиска этой информации. Пока вы завершаете этот код в функции или proc и документе, на которые у вас есть зависимость, это кажется наименьшим из многих зол для меня.
На моем SQL Server это перечисляет задания, которые закончились за считанные часы – Andomar