需要写个小程序接管SQL Agent的作业功能,求教

狼异族 2014-02-12 11:46:39
现在连接数据库解决了,在作业步骤属性中,需要考虑类型么?我怎么用代码去执行那些命令或者脚本?怎么获取执行结果呢?
...全文
126 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
关键是,任务执行后,得有一种机制,来通知程序,这个任务已经完成了。 我在上家公司,他们使用java开发程序的,在程序中实现了类似于sql server作业的功能,不过功能更强大,但这个是用额外的java代码来实现的。
  • 打赏
  • 举报
回复
引用 3 楼 L812234929 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 或者可以考虑这样,你单独设计一个日志表。 然后,每次在运行一个任务的时候,往表里插入一条记录,包括,任务的名称、运行时间、运行状态为running等,然后当任务结束后,把结果插入到另一个存储结果集的表中,同时更新这个日志表,把运行的结束时间写上,状态为完成。 而需要等待这个任务运行,取出结果的程序,可以定时查询这个日志表,看状态是否是完成,如果完成,就从结果集表中,查询数据。
我懂你的意思,但是我执行一条命令之后,我怎么知道这个任务什么时间结束啊,到底是成功了还是失败了?如果失败了,可以知道为什么失败了吗?还有就是我现在用的MFC::CDataBase连接的数据库,我怎么去执行这些命令或者脚本?[/quote] 这个任务是否成功,可以在任务中加上try-catch,如果有错误,就把错误信息,update到日志表中,另外,通过如下的代码,也能查询到:
select j.name as job_name,  
         
       js.step_name,  
         
       h.run_date,  
       h.run_time,  
       h.run_duration,  
       h.server,  
         
       case run_status  
            when 0  then '失败'  
            when 1  then '成功'  
            when 2  then '重试'  
            when 3  then '取消'  
            when 4  then '正在进行'  
       end as run_status  
              
from msdb.dbo.sysjobhistory h  
  
inner join msdb.dbo.sysjobs j  
        on h.job_id = j.job_id  
          
inner join msdb.dbo.sysjobsteps js  
        on js.job_id = h.job_id  
           and js.step_id = h.step_id  
發糞塗牆 2014-02-12
  • 打赏
  • 举报
回复
不过如果仅为了知道作业的情况,在配置的时候就有job成功、失败时的对应处理,比如发邮件、notification等
發糞塗牆 2014-02-12
  • 打赏
  • 举报
回复
这个可以查msdb的对应表来获取job的状态。
狼异族 2014-02-12
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
或者可以考虑这样,你单独设计一个日志表。 然后,每次在运行一个任务的时候,往表里插入一条记录,包括,任务的名称、运行时间、运行状态为running等,然后当任务结束后,把结果插入到另一个存储结果集的表中,同时更新这个日志表,把运行的结束时间写上,状态为完成。 而需要等待这个任务运行,取出结果的程序,可以定时查询这个日志表,看状态是否是完成,如果完成,就从结果集表中,查询数据。
我懂你的意思,但是我执行一条命令之后,我怎么知道这个任务什么时间结束啊,到底是成功了还是失败了?如果失败了,可以知道为什么失败了吗?还有就是我现在用的MFC::CDataBase连接的数据库,我怎么去执行这些命令或者脚本?
  • 打赏
  • 举报
回复
或者可以考虑这样,你单独设计一个日志表。 然后,每次在运行一个任务的时候,往表里插入一条记录,包括,任务的名称、运行时间、运行状态为running等,然后当任务结束后,把结果插入到另一个存储结果集的表中,同时更新这个日志表,把运行的结束时间写上,状态为完成。 而需要等待这个任务运行,取出结果的程序,可以定时查询这个日志表,看状态是否是完成,如果完成,就从结果集表中,查询数据。
  • 打赏
  • 举报
回复
一般选择“T-SQL脚本就可以了”。 你说怎么获取结果是什么意思,一般作业都是完成一个任务,不会有交互的,所以一般可以把结果保存在一个表中。

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧