【问题标题】:T-SQL Task generator scriptT-SQL 任务生成器脚本
【发布时间】:2014-10-09 18:53:59
【问题描述】:

我需要创建一个 T-SQL(我正在使用 SQL Server 2008 Express)脚本(procedure/function) “Tasks”表中的条目并仅生成计划在接下来 5 小时内发生的任务。

在“任务”表中,我应该有具有 job 属性的任务:

  • 发生次数:一次或递归

  • 频率:每 x 天、周、月

  • 取决于频率

  • 每天:每 x 小时、分钟

  • 每周 -一周中的哪几天应该发生的任务

  • 每月 - 第一、第二、最后 - 日、工作日、周末 -
    星期几的第 1、2、3..31 天。

当我运行脚本时,如果任务每 x 分钟发生一次,我应该只获得将在接下来的 5 小时或更短时间内发生的任务。 所以这个脚本实际上应该做的是使用 SQL Server 作业中的所有选项来完成任务。

示例 1:我创建了一个每天在 14:00 到 15:00 之间发生的任务“检查电子邮件”。当我在 09:00 运行脚本时,我会得到任务:“检查电子邮件”时间:距离任务还剩 5 小时,因为它每天都会发生,我应该能够在每天滚动脚本时得到这个结果,只有当5 小时或更短的范围。

示例 2每月在第一个工作日(不是周末)下午 01:00 发生的“发送工时报告”任务。在每月的第一周上午 08:00 运行脚本我应该得到任务:“发送小时报告”时间:距离任务 5 小时

我知道这是一个很大的要求,但希望有人会觉得这对我来说似乎很难。

【问题讨论】:

  • 你的问题一点都不清楚。你问的是sql作业吗?或者这是您正在编写的某种东西,它将实现与许多其他可用东西相同类型的调度?如果是后者,我会问你为什么不能使用预制调度程序。正如您所发现的那样,它非常复杂。
  • 不询问 sql 作业,它是作业的替代方案。预先制定的时间表是个好主意。我需要脚本来查看计划在接下来 5 小时或更短的时间内完成的任务。

标签: sql sql-server sql-server-2008 tsql task


【解决方案1】:

您还应该在某处存储每个作业的最后执行日期/时间(至少对于配置为每 x 小时/分钟的作业)。这个想法是计算每个作业的下一个执行日期/时间,如果距离它不到 5 小时,则返回它。如果作业配置为每 x 小时/分钟,请使用 DATEADD 并检查结果是否在配置的时间范围内。如果作业配置为每天(在指定时间),只需检查指定时间是否小于 5 小时(但仍在未来)。我做了一个类似的功能,检查所有情况并不是一件容易的事(我花了几天的时间编码)。

【讨论】:

  • 我会为此创建一个执行队列。对于每周或每月在特定工作日或每月的第一、二到最后一天发生的任务,我觉得比较困难。
猜你喜欢
  • 2021-03-21
  • 1970-01-01
  • 2013-12-06
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 2012-02-18
相关资源
最近更新 更多