求查询夜间运行作业中失败作业步骤的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
相关产品推荐
相关产品推荐

