2014-01-23 4 views
3

Как получить последние данные о задании задания в SQL Server Agent с использованием SQL, включая сведения о шаге только для последнего задания на выполнение (а не результат задания), поскольку я хочу отобразить это в приложениеКак получить последние данные задания на запуск в SQL

Пожалуйста, помогите застрял на этом в течение веков

Это код, который я использую ниже, это возвращает все шаги для всех рабочих мест в истории работы,

Однако, я просто хочу для просмотра шагов от последние работа на работу

благодаря

USE msdb 
Go 
SELECT j.name JobName,h.step_name StepName, 
CONVERT(CHAR(10), CAST(STR(h.run_date,8, 0) AS dateTIME), 111) RunDate, 
STUFF(STUFF(RIGHT('000000' + CAST (h.run_time AS VARCHAR(6)) ,6),5,0,':'),3,0,':') RunTime, 
h.run_duration StepDuration, 
    case h.run_status when 0 then 'Failed' 
    when 1 then 'Succeeded' 
    when 2 then 'Retry' 
    when 3 then 'Cancelled' 
    when 4 then 'In Progress' 
end as ExecutionStatus, 
h.message MessageGenerated 
FROM sysjobhistory h 
inner join sysjobs j 
ON j.job_id = h.job_id 

    LEFT JOIN (
       SELECT 
        [job_id] 
        , [run_date] 
        , [run_time] 
        , [run_status] 
        , [run_duration] 
        , [message] 
        , ROW_NUMBER() OVER (
              PARTITION BY [job_id] 
              ORDER BY [run_date] DESC, [run_time] DESC 
        ) AS RowNumber 
       FROM [msdb].[dbo].[sysjobhistory] 
       WHERE [step_id] = 0 
      ) AS [sJOBH] 
      ON j.[job_id] = [sJOBH].[job_id] 
      AND [sJOBH].[RowNumber] = 1 

where j.job_id = 'F04E5D3B-C873-448A-805C-C6309A92DAEC' 

ORDER BY j.name, h.run_date, h.run_time desc 
GO 
+0

Вы можете присоединиться к этому запросу с другим, который делает Max (last_run_date), группируя имя вашего задания. Тогда ваше предложение о присоединении может присоединиться к заданию, а также last_run_date – ganders

ответ

6

Надеется, что это помогает,

Дополнительных присоединиться к msdb.dbo.sysjobactivity показывает начало/конца время на уровне рабочих мест. Используя этот диапазон, вы можете указать, чтобы показывать только шаги работы для последнего запуска.

DECLARE @job_id UNIQUEIDENTIFIER 
      ,@job_name VARCHAR(256) 

    SET @job_id = 'DF4C9555-5B24-4649-97CE-5708C53F762C' 
    SET @job_name = 'syspolicy_purge_history' 

    --search for job_id if none was provided 
    SELECT @job_id = COALESCE(@job_id,job_id) 
    FROM msdb.dbo.sysjobs 
    WHERE name = @job_name 

    SELECT t2.instance_id 
      ,t1.name as JobName 
      ,t2.step_id as StepID 
      ,t2.step_name as StepName 
      ,CONVERT(CHAR(10), CAST(STR(t2.run_date,8, 0) AS DATETIME), 111) as RunDate 
      ,STUFF(STUFF(RIGHT('000000' + CAST (t2.run_time AS VARCHAR(6)) ,6),5,0,':'),3,0,':') as RunTime 
      ,t2.run_duration 
      ,CASE t2.run_status WHEN 0 THEN 'Failed' 
           WHEN 1 THEN 'Succeeded' 
           WHEN 2 THEN 'Retry' 
           WHEN 3 THEN 'Cancelled' 
           WHEN 4 THEN 'In Progress' 
           END as ExecutionStatus 
      ,t2.message as MessageGenerated  
    FROM msdb.dbo.sysjobs t1 
    JOIN msdb.dbo.sysjobhistory t2 
      ON t1.job_id = t2.job_id 
      --Join to pull most recent job activity per job, not job step 
    JOIN (
      SELECT TOP 1 
        t1.job_id 
        ,t1.start_execution_date 
        ,t1.stop_execution_date 
      FROM msdb.dbo.sysjobactivity t1 
      --If no job_id detected, return last run job 
      WHERE t1.job_id = COALESCE(@job_id,t1.job_id) 
      ORDER 
      BY  last_executed_step_date DESC 
      ) t3 
      --Filter on the most recent job_id 
      ON t1.job_id = t3.job_Id 
      --Filter out job steps that do not fall between start_execution_date and stop_execution_date 
      AND CONVERT(DATETIME, CONVERT(CHAR(8), t2.run_date, 112) + ' ' 
      + STUFF(STUFF(RIGHT('000000' + CONVERT(VARCHAR(8), t2.run_time), 6), 5, 0, ':'), 3, 0, ':'), 121) 
      BETWEEN t3.start_execution_date AND t3.stop_execution_date 

Редактировать: добавлены два параметра вверху, @job_id и @job_name. Если @job_id не предоставляется, сначала он попытается определить job_id из предоставленного @job_name и вернуть последнее задание запуска, если не указаны значения.

+0

привет, спасибо, это прекрасно! Большое вам спасибо, одна модификация, которую я хотел бы добавить, - это показать только последнюю работу, выполняемую с определенным job_id, если бы вы могли добавить, что это тогда было бы потрясающе! – neeko

 Смежные вопросы

  • Нет связанных вопросов^_^