Sql代理作业上次运行状态

Had*_*adi 1 sql t-sql sql-server

我有 N 个工作,每个工作有 M 个步骤,可以随时更改(添加/删除一些步骤)。作业有不同的运行时间表。我想要一个查询来获取每个作业的上次运行状态、作业 ID、作业名称。这样做是正确的方法(Job outcome)吗?

EzL*_*zLo 7

这是我使用(稍微调整)来检查作业状态的查询。此变体将为job outcome每个作业选择最后一个。

SELECT
    JobName = J.name,
    H.*
FROM
    msdb.dbo.sysjobs AS J
    CROSS APPLY (
        SELECT TOP 1
            JobName = J.name,
            StepNumber = T.step_id,
            StepName = T.step_name,
            StepStatus = CASE T.run_status
                WHEN 0 THEN 'Failed'
                WHEN 1 THEN 'Succeeded'
                WHEN 2 THEN 'Retry'
                WHEN 3 THEN 'Canceled'
                ELSE 'Running' END,
            ExecutedAt = msdb.dbo.agent_datetime(T.run_date, T.run_time),
            ExecutingHours = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) / 60,
            ExecutingMinutes = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) % 60,
            Message = T.message
        FROM
            msdb.dbo.sysjobhistory AS T
        WHERE
            T.job_id = J.job_id
        ORDER BY
            T.instance_id DESC) AS H
ORDER BY
    J.name
Run Code Online (Sandbox Code Playgroud)

如果更改TOP 1for TOP 2,那么除了job outcome.