加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:26:30 所属栏目:MsSql教程 来源:网络整理
导读:我有一个执行存储过程的步骤作业.我想获得上次成功执行作业的日期,以便我可以更新delta而不是整个数据集. 现在我的作业设置每天运行一次,所以我有一个默认参数,如果它为null我将它设置为GETDATE() – 1所以我仍然在更新delta但是我想做的是设置上次成功执行作
我有一个执行存储过程的步骤作业.我想获得上次成功执行作业的日期,以便我可以更新delta而不是整个数据集.

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

exec dbo.usp_UpdateFrom @LastSuccessfulExecutionTime

目前的程序是这样的

CREATE PROCEDURE dbo.usp_UpdateFrom
    @FromDate datetime = NULL --would like to pass last successful execution time of the job
AS
    IF @FromDate IS NULL
        SET @FromDate = GETDATE() - 1

    -- do stuff
END

解决方法

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

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

DECLARE @job_id binary(16)
SELECT @job_id = job_id FROM msdb.dbo.sysjobs WHERE (name = N'YourJobName')

SELECT TOP 1
    CONVERT(DATETIME,RTRIM(run_date))
    + ((run_time / 10000 * 3600) 
    + ((run_time % 10000) / 100 * 60) 
    + (run_time % 10000) % 100) / (86399.9964) AS run_datetime,*
FROM
    msdb..sysjobhistory sjh
WHERE
    sjh.step_id = 0 
    AND sjh.run_status = 1 
    AND sjh.job_id = @job_id
ORDER BY
    run_datetime DESC

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读