2013-04-09 4 views
-1

Мне нужно разработать список повторяющихся предложений агента SQL Server (и, надеюсь, превратить его в диаграмму Ганта). Выполнение этого для нормально запланированных заданий является общей проблемой, и я столкнулся с множеством примеров запросов для его решения. То, что я не смог найти, - это также использовать данные для рабочих мест, которые работают регулярно, но не по расписанию. Возможно, наши самые важные задания инициируются другими программами. (Вот почему Last_Ran_Time для меня важнее, чем Next_Run_Time, поскольку SQL Server не знает, когда они будут вызваны следующим.)Как запросить повторяющиеся, но не запланированные задания агента SQL

Что я спрашиваю, где/как SQL Server хранит информацию о неплановых рабочие места. Все примеры, которые я нашел до сих пор, вырезали задания, вызванные извне. В конце концов, было бы неплохо иметь Job Name, Average Duration и Last Ran Time (или время окончания).

ответ

1
select j.name as [Job Name], sum(run_duration)/count(distinct instance_id) as [Average Duration], max(cast(cast (run_date as varchar(32)) + ' ' + stuff(stuff(reverse(substring(reverse('0' + cast(run_time as varchar(32))), 1, 6)), 3, 0, ':'), 6, 0, ':') as datetime2)) as [Last Ran Time] 
from msdb..sysjobs j 
inner join msdb..sysjobhistory h on h.job_id = j.job_id 
left outer join msdb..sysjobschedules s on j.job_id = s.job_id 
where s.job_id is null 
group by j.name 

только возвращает данные для работ, не связанных с графиками.

+0

Это выглядит многообещающим, но я получил сообщение об ошибке «Преобразование типа данных varchar в тип данных datetime приводит к значению вне диапазона». когда я попытался запустить его. – mrae

+0

Помогает ли это сейчас? Я перешел на преобразование, чтобы использовать 'datetime2'. У вас должно быть значение, которое выходит за пределы диапазона для даты и времени. Вы также можете удалить бросок в datetime в целом, чтобы узнать, что это за значение. – muhmud

+0

Я удалил бросок. Я могу работать с этим столбцом. Огромное спасибо. – mrae

0

Итак, как вы нашли информацию о запланированных работах? Это должно помочь вам:

select top 100 
    * 
from msdb..sysjobhistory h 
inner join msdb..sysjobs j 
    on h.job_id = j.job_id