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

求查询夜间运行作业中失败作业步骤的T-SQL语句

查询过去24小时内失败的SQL Server作业步骤

嘿,我来帮你搞定这个问题!针对你要排查夜间运行作业(包括SSIS包和存储过程)中失败的步骤,这里有个精准的T-SQL语句,能直接拉取过去24小时内所有失败的作业步骤详情:

SELECT
    j.name AS 作业名称,
    js.step_name AS 作业步骤名称,
    -- 将作业历史的日期和时间字段转换为标准Datetime格式
    CONVERT(DATETIME, CONVERT(VARCHAR(8), jh.run_date) + ' ' + 
        STUFF(STUFF(RIGHT('000000' + CONVERT(VARCHAR(6), jh.run_time), 6), 3, 0, ':'), 6, 0, ':')) AS 作业开始时间,
    jh.run_duration AS 运行时长(秒),
    jh.message AS 错误信息
FROM
    msdb.dbo.sysjobhistory jh
INNER JOIN
    msdb.dbo.sysjobs j ON jh.job_id = j.job_id
INNER JOIN
    msdb.dbo.sysjobsteps js ON jh.job_id = js.job_id AND jh.step_id = js.step_id
WHERE
    -- 筛选失败的作业步骤(run_status=0代表失败)
    jh.run_status = 0
    -- 只查询过去24小时内的记录
    AND CONVERT(DATETIME, CONVERT(VARCHAR(8), jh.run_date) + ' ' + 
        STUFF(STUFF(RIGHT('000000' + CONVERT(VARCHAR(6), jh.run_time), 6), 3, 0, ':'), 6, 0, ':')) >= DATEADD(HOUR, -24, GETDATE())
ORDER BY
    作业开始时间 DESC;

语句说明:

  • 核心视图关联:通过sysjobhistory(作业执行历史)、sysjobs(作业基本信息)、sysjobsteps(作业步骤信息)三个系统视图关联,拿到完整的作业和步骤名称。
  • 时间转换:SQL Server Agent的作业历史用run_date(YYYYMMDD格式)和run_time(HHMMSS格式)分开存储,这里把它们转换成标准的datetime格式,方便时间范围筛选。
  • 失败筛选:run_status=0是SQL Server定义的作业失败状态,其他常见状态还有1(成功)、2(重试)、3(取消)。
  • 错误信息:message字段会包含失败的具体原因,比如SSIS包的执行错误、存储过程的报错内容,能帮你快速定位问题。

如果需要更针对性的筛选(比如只查SSIS类型的作业步骤),可以再加个条件:js.subsystem = 'SSIS',这样就能只看SSIS包相关的失败步骤啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:45:41