正文:
 
1、SQL Server 代理作业概述
 
本文不是详细讲解代理作业的,仅仅从代理作业历史表(dbo.sysjobhistory)的角度来学习和研究代理作业的执行时间。执行以下T-SQL代码:
SELECT
[job_id]
,[step_id]
,[run_status]
,[run_date]
,[run_time]
,[run_duration]
FROM
[dbo].[sysjobhistory]
WHERE
[run_duration] >= 1
ORDER BY
[run_duration] DESC;
GO
以上T-SQL的执行结果如下图:
从以上图中很容易看到字段列run_date、run_time和run_duration的数据格式。结合微软联机帮助文档学习到:run_date字段列值的数据格式为yyyMMdd(该列值表示代理作业开始执行时的日期部分,如上图run_date字段列值为20170316表示该作业开始执行于2017-03-16这个日期点),run_time字段列值的数据格式为hhmmss(该列值表示代理作业开始执行时的时间部分,如上图run_time字段列值为20000表示执行于02:00:00这个时间点),run_duration字段列值的数据格式为hhmmss(这个是持续时间的数据格式,例如上图中的dun_duration为127表示改作业执行从开始到完成共持续了1分27秒)。
 
通常情况下,我在数据表设计尤其涉及到记录活动发生的日期时间点时更多的使用datetime这个数据类型的字段列。针对run_date和run_time的数据格式可以通过dbo.agent_datetime标量函数来转换为datetime数据类型。执行以下T-SQL代码:
SELECT [dbo].[agent_datetime](20170316, 20000) AS [run_datetime];
GO

以上T-SQL的执行结果如下图:

那么如何将run_duration字段列值转换为秒、分、小时等?下面继续探究。
 
2、获取代理作业执行时间方法一
 
这个方法具体参考了dbo.agent_datetime函数的定义和查看SQLServer 代理作业的历史信息这边博文中提供的方法,具体实现的T-SQL代码如下:
 
SELECT
[T1].[job_id]
,[T1].[name] AS [job_name]
,[T2].[run_status]
,[T2].[run_date]
,[T2].[run_time]
,[dbo].[agent_datetime]([T2].[run_date], [T2].[run_time]) AS [run_datetime]
,[T2].[run_duration]
,([T2].[run_duration] /10000 * 3600 + [T2].[run_duration] % 10000 / 100 * 60 + [T2].[run_duration] % 100 + 31) AS [run_duration_s]
FROM
[dbo].[sysjobs] AS [T1]
INNER JOIN [dbo].[sysjobhistory] AS [T2]
ON [T2].[job_id] = [T1].[job_id]
WHERE
[T1].[enabled] = 1
AND [T2].[step_id] = 0
AND [T2].[run_duration] >= 1
ORDER BY
[T2].[job_id] ASC
,[T2].[run_date] ASC
GO
以上T-SQL的执行结果如下图:
注意:
  • 这种方法才用了精度设置,默认精度为31秒,也就是说如果作业的执行持续时间超过30秒(包括等于30秒)时会自动增加31秒。
 
3、获取代理作业执行时间方法二
 
这个方法依然使用dbo.agent_datetime函数,还会增加dateadd函数和datediff函数。具体实现的T-SQL代码如下:
SELECT
[T1].[job_id]
,[T1].[name] AS [job_name]
,[T2].[run_status]
,[T2].[run_date]
,[T2].[run_time]
,[dbo].[agent_datetime]([T2].[run_date], [T2].[run_time]) AS [run_datetime]
,[T2].[run_duration]
,DATEDIFF(SECOND, '1900-01-01', DATEADD(SECOND, 31, [dbo].[agent_datetime](19000101, [run_duration]))) AS [run_duration_s]
FROM
[dbo].[sysjobs] AS T1
INNER JOIN [dbo].[sysjobhistory] AS T2
ON [T2].[job_id] = [T1].[job_id]
WHERE
[T1].[enabled] = 1
AND [T2].[step_id] = 0
AND [T2].[run_duration] >= 1
ORDER BY
[T2].[job_id] ASC
,[T2].[run_date] ASC
GO
以上T-SQL的执行结果如下图:
注意:
  • 该方法依然采用了默认精度为31秒。
  • sql server系统提供的日期函数采用的默认基准日期是1900-01-01,这个可以使用0替代换。
 

4、总结语

 
通过研读博友的文章和学习微软联机文档,确实能够学到很多的知识。sql 的路上唯有继续修行,才能了解的更多。
 
 

(原)SQL Server 代理作业执行持续时间简述的更多相关文章

  1. SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误

    1. 情况说明 在利用SQL SERVER数据库复制向导,能够很方便的将一个数据库从一台服务器复制到另一台服务器上,具体操作步骤也十分简单. 不过在实际操作过程常发生“执行SQL SERVER代理作业 ...

  2. 第二篇 SQL Server代理作业步骤和子系统

    本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...

  3. 【译】第二篇 SQL Server代理作业步骤和子系统

    本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...

  4. 第七篇 SQL Server代理作业活动监视器

    本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这一系列的上一篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作 ...

  5. 【译】第七篇 SQL Server代理作业活动监视器

    本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这一系列的上一篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作 ...

  6. sqlserver 使用脚本创建Sql Server代理作业

    use master GO /* --开启sql server代理 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_con ...

  7. SQL SERVER代理作业删除失败问题

    在SQL Server 2005上遇到了先删除已运行维护计划后,再删除代理中由其产生的作业时,提示删除失败.   DELETE 语句与 REFERENCE 约束"FK_subplan_job ...

  8. SQL Server Agent作业执行CmdExec(bat)命令报权限问题

    写了一个bat命令,定期去清理一些SQL Server的Dump文件,然后配置成SQL Server作业,作业执行时报权限错误,具体错误信息如下所示: Message Executed as user ...

  9. MSSQL SQL Server代理 作业 设置(调用存储过程)

    1.新建作业名 “生成分区文件及文件组“ 2.新建  步骤  名 “CreatePartTable” 步骤名:CreatePartTable 类型:Transact-SQL 脚本(T-SQL) 数据库 ...

随机推荐

  1. 关于Servlet中GET和POST方法的总结

    JSP.Servlet中get请求和post请求的区别总结   在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法.关于Servlet中get请求和 ...

  2. 吐嘈OpenCV的图像旋转功能 >_<7

    實在出乎我的意料!OpenCV竟然連這么簡單的功能都沒有封裝!還要讓本大爺自己動手寫!強烈要求OpenCV下一個版本添加本功能! 函數功能和這個網頁一樣,只不過這個作者寫的太糟了,我把它變得簡潔了一點 ...

  3. Javascript 金额、时间格式化

    一晃2017年已经过去了,2018年已经悄然而至.回首过去的2017年,工作还是一如既往,但生活却有了翻天覆地的变化.尚还觉得自己还小的自己,在过去的一年中却完成了两件人生大事,回想起来还是一脸懵逼, ...

  4. 第5件事 做一个有taste的产品人

    1.taste的意思是品位,也就是说产品经理应该是一个有品位的产品人.什么叫品位呢?品位指的是对事物有分辨与鉴赏的能力.品位是形象的展示,品位是内在气质的复出,品位是人生价值的体验,品位是道德修养的内 ...

  5. MVC框架json数据展示程序(第一版)

    模型原型:服务器的配置和运行状态信息. 设计要求:Json格式数据解析后,判断配置信息是否是新数据或者是否更新.如是新数据,则直接添加到数据库:若是数据更新,则更新数据库配置信息并更新运行状态信息:都 ...

  6. .Net中验证码图片生成

    开发网站或平台系统,登录页面是必不可少的功能,但是现在很多人可以使用工具暴力破解网站密码,为了防止这类非法操作,需要在登录页面添加验证,验证码就是最常用的一种验证方式. 我结合了自己的经验和网上的验证 ...

  7. [学习笔记]CDQ分治和整体二分

    序言 \(CDQ\) 分治和整体二分都是基于分治的思想,把复杂的问题拆分成许多可以简单求的解子问题.但是这两种算法必须离线处理,不能解决一些强制在线的题目.不过如果题目允许离线的话,这两种算法能把在线 ...

  8. 安装fastdfs文件系统

    1.下载源码包 需要下载的源码包: fastDFS源代码:FastDFS_v5.01.tar.gz fastDFS的nginx模块源代码:fastdfs-nginx-module_v1.15.tar. ...

  9. CSS之浏览器默认样式问题

    今天自己写css样式时,其中用到了<ul>标签,设置了一系列效果后运行,发现位置与设置有出入.chrome上打开检查项,发现<ul>标签的styles底部多了以下一段: ul, ...

  10. win10+Theano+GPU

    1. cuda + cudnn 首先还是要先安装GPU库,具体和caffe安装中一样. 2. Theano 为防止下载速度慢,配置清华镜像 conda config --add channels ht ...