sql-server – 获取上次成功运行的日期?

前端之家收集整理的这篇文章主要介绍了sql-server – 获取上次成功运行的日期?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个执行存储过程的步骤作业.我想获得上次成功执行作业的日期,以便我可以更新delta而不是整个数据集.

现在我的作业设置每天运行一次,所以我有一个默认参数,如果它为null我将它设置为GETDATE() – 1所以我仍然在更新delta但是我想做的是设置上次成功执行作业的日期.

  1. exec dbo.usp_UpdateFrom @LastSuccessfulExecutionTime

目前的程序是这样的

  1. CREATE PROCEDURE dbo.usp_UpdateFrom
  2. @FromDate datetime = NULL --would like to pass last successful execution time of the job
  3. AS
  4. IF @FromDate IS NULL
  5. SET @FromDate = GETDATE() - 1
  6.  
  7. -- do stuff
  8. END

解决方法

您想要的表是msdb中的 sysjobssysjobhistory.虽然被警告! sql Server只维护一定数量的记录,因此如果作业太多且历史记录不够大,最终将没有历史记录.

以下代码检索给定作业名称的job_id,并查询历史记录表以查找上次成功完成的运行(即步骤0,状态1).如您所见,您必须将运行时间转换回日期,因为sql Server将其存储在两个int列中:

  1. DECLARE @job_id binary(16)
  2. SELECT @job_id = job_id FROM msdb.dbo.sysjobs WHERE (name = N'YourJobName')
  3.  
  4. SELECT TOP 1
  5. CONVERT(DATETIME,RTRIM(run_date))
  6. + ((run_time / 10000 * 3600)
  7. + ((run_time % 10000) / 100 * 60)
  8. + (run_time % 10000) % 100) / (86399.9964) AS run_datetime,*
  9. FROM
  10. msdb..sysjobhistory sjh
  11. WHERE
  12. sjh.step_id = 0
  13. AND sjh.run_status = 1
  14. AND sjh.job_id = @job_id
  15. ORDER BY
  16. run_datetime DESC

猜你在找的MsSQL相关文章