SQL server作业历史记录-作业执行id?

SQL server作业历史记录-作业执行id?,sql,sql-server,sql-agent-job,sql-agent,log-viewer,Sql,Sql Server,Sql Agent Job,Sql Agent,Log Viewer,我试图弄清楚SQL server如何将其作业历史层次结构分组,以将结果与所有作业步骤关联起来。我正在使用数据可视化工具跟踪仪表板中的错误,但整个工作结果步骤让我抓狂 给定作业执行中的所有步骤是否都没有ID链接?我假设instance_id+maxstep_id为step_id=0的instance_id提供作业结果。鉴于日志文件查看器在可扩展的层次结构中具有结果,我认为必须有某种一致的方式在数据库中表示该层次结构 使用job_id+run_date可以处理一天只发生一次的作业,其中所有步骤都在同

我试图弄清楚SQL server如何将其作业历史层次结构分组,以将结果与所有作业步骤关联起来。我正在使用数据可视化工具跟踪仪表板中的错误,但整个工作结果步骤让我抓狂

给定作业执行中的所有步骤是否都没有ID链接?我假设instance_id+maxstep_id为step_id=0的instance_id提供作业结果。鉴于日志文件查看器在可扩展的层次结构中具有结果,我认为必须有某种一致的方式在数据库中表示该层次结构

使用job_id+run_date可以处理一天只发生一次的作业,其中所有步骤都在同一天完成,但当作业一天运行多次时会出现故障

基本上,我想将作业历史记录表连接到它本身,在这里,我将作业执行的作业结果连接到每个步骤,这样我就可以构建一个层次结构,就像在可视化工具的日志查看器中看到的那样

日志查看器示例图像:

有什么想法吗

我找到了解决方案,关键是步骤将在作业开始时间和作业运行持续时间内:

`


`具有讽刺意味的是,msdb.dbo.sysjobactivity中的job\u history\u id字段似乎是。不是job_id,因为它是整个作业本身的密钥,人们会认为它位于msdb.dbo.sysjobhistory中。。。MS肯定在这里尽可能做到了非用户友好。在很多情况下它也是空的。不知道你会走多远。谢谢你的信息!真奇怪。所以我看到了job_history_id,这很好,只是sysjobhistory的步骤上似乎没有这个字段!我觉得我快要发疯了,但这似乎没有任何意义。人们不想知道哪些步骤与在日志查看器之外运行的给定作业相关吗?好的,我找到了一种构建层次结构的方法。。诀窍在于,步骤运行时间将介于作业开始时间和作业开始时间加上步骤id=0的持续时间之间。我仍然认为没有工作执行的关键是疯狂的,但是嘿``
select *
from
(
select sjh.run_date job_run_date
    , jobs.name job_name
    ,dbo.agent_datetime(sjh2.run_date,sjh2.run_time) job_start_time
    ,CASE sjh2.run_status WHEN 0 THEN 'Job Failed' WHEN 1 THEN 'Job Succeeded' END job_status
    ,sjh2.message job_message
    ,STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(sjh2.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') 'job_run_duration'
    , sjh.step_id
    , sjh.step_name
    ,dbo.agent_datetime(sjh.run_date,sjh.run_time) step_run_time
    ,CASE sjh.run_status WHEN 0 THEN 'Step Failed' WHEN 1 THEN 'Step Succeeded' END step_status
    ,sjh.message step_message
    ,STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(sjh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') 'step_run_duration'
--  , *
from sysjobhistory sjh
join sysjobs jobs on jobs.job_id = sjh.job_id
join sysjobhistory sjh2 on sjh2.run_date = sjh.run_date 
                       and sjh2.job_id = sjh.job_id 
                       and sjh2.step_id = 0
                       and sjh.run_time >= sjh2.run_time
                       and sjh.run_time <= sjh2.run_time + sjh2.run_duration
) t1
order by job_run_date desc, job_name desc, job_start_time, step_id