正文:
 
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. [LISP] LISP Collections

    lispbox: https://common-lisp.net/project/lispbox/ SBCL: http://sbcl.org/ <Common Lisp in practica ...

  2. Delphi获取公网IP地址函数

    uses IdHTTP; function GetPublicIP: string; var strIP, URL: string; iStart, iEnd: Integer; MyIdHTTP: ...

  3. 利用RGB-D数据进行人体检测 带dataset

    利用RGB-D数据进行人体检测 LucianoSpinello, Kai O. Arras 摘要 人体检测是机器人和智能系统中的重要问题.之前的研究工作使用摄像机和2D或3D测距器.本文中我们提出一种 ...

  4. 一次典型的TFS故障处理:域控失联

    问题描述 突然收到客户报告,开发人员登录TFS系统时,出现登录异常现象.即使输入了正确的账户和密码,TFS系统任然提示重新登录的页面,导致用户无法打开TFS系统. 即使登录成功,在修改代码或者修改工作 ...

  5. 【图数据结构的遍历】java实现广度优先和深度优先遍历

    [图数据结构的遍历]java实现广度优先和深度优先遍历 宽度优先搜索(BFS)遍历图需要使用队列queue数据结构: 深度优先搜索(DFS, Depth First Search)的实现 需要使用到栈 ...

  6. 在线安装WordPress更新 失败的解决办法

    1.  登录ftp登录不上 , 总是登录失败 在服务器上新建了一个vsftpd服务器,并设置了相应的虚拟用户,修改chroot到网站目录 相关连接:https://blog.csdn.net/zhan ...

  7. WPF学习笔记(4):获取DataGridTemplateColumn模板定义的内容控件

    在之前的DataGrid的DataGridTemplateColumn列中,自定义了一个TextBox控件,但是在C#代码中提示找不到这个控件,导致无法对该控件进行操作.在网上搜索后,发现一些处理方法 ...

  8. .NET MVC 学习笔记(二)— Bootstrap框架

    二..NET MVC 学习笔记(一)—— Bootstrap框架 在实际开发过程中,页面的样式问题是让人很头疼的问题,良好的用户界面可以大大提高用户体检,而在你没有前端开发人员的火力支援情况下,并不是 ...

  9. 使用C#写MVC框架(一:核心原理)

    目录: 一.MVC原理解析 二.HttpHandler 1.HttpHandler,IHttpHandler,MvcHandler的说明 2.IHttpHandler解析 3.MvcHandler解析 ...

  10. Resolving SharePoint Application Authentication Error: Login Failed

    Check event viewer log Click Start, click Run, type eventvwr, and then click OK. Click on Security u ...