You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过T-SQL查询提取SQL Server作业分步执行历史?

解决SQL Server作业历史按步骤拆分查询的方法

可以直接查询MSDB数据库中的系统表来关联作业步骤和历史记录,替代系统存储过程的不足。核心是通过job_id和step_id字段关联sysjobhistory(作业历史)、sysjobsteps(作业步骤)和sysjobs(作业基本信息)三张表。

示例查询语句

USE msdb;
GO

SELECT
    j.name AS 作业名称,
    js.step_name AS 步骤名称,
    js.step_id AS 步骤ID,
    run_date AS 执行日期,
    run_time AS 执行时间,
    -- 转换run_date和run_time为标准日期时间格式
    CONVERT(DATETIME, 
        CONVERT(VARCHAR(8), run_date) + ' ' + 
        STUFF(STUFF(RIGHT('000000' + CONVERT(VARCHAR(6), run_time), 6), 3, 0, ':'), 6, 0, ':')
    ) AS 开始执行时间,
    run_duration AS 执行时长(秒),
    -- 状态码说明:0=成功,1=失败,2=重试,3=取消,4=正在运行
    CASE run_status
        WHEN 0 THEN '成功'
        WHEN 1 THEN '失败'
        WHEN 2 THEN '重试'
        WHEN 3 THEN '取消'
        WHEN 4 THEN '正在运行'
        ELSE '未知'
    END AS 执行状态,
    message AS 执行消息
FROM
    dbo.sysjobhistory h
INNER JOIN
    dbo.sysjobsteps js ON h.job_id = js.job_id AND h.step_id = js.step_id
INNER JOIN
    dbo.sysjobs j ON h.job_id = j.job_id
WHERE
    h.job_id = N'blahblahblah' -- 替换为你的目标作业ID
ORDER BY
    run_date DESC, run_time DESC, step_id ASC;

关键说明

  • sysjobhistory:存储作业及每个步骤的执行历史,step_id对应具体步骤(0代表作业整体汇总记录,1及以上对应单个步骤)
  • sysjobsteps:存储作业的所有步骤定义,通过job_id和step_id与历史表关联
  • 日期转换:系统表中run_date(YYYYMMDD格式)和run_time(HHMMSS格式)为整数类型,转换为标准datetime格式更便于外部应用解析
  • 过滤步骤级记录:如果只需要单个步骤的历史,可在WHERE条件中添加h.step_id > 0,排除作业整体的汇总行

内容的提问来源于stack exchange,提问作者frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:59:55