一尘不染

“重复任务”的设计选项

sql

我正在编写一个处理人的任务的小应用程序。非常简单,但就表格设计而言,我所坚持的区域是重复执行的任务,可以是一次,每天,每周或每月一次。如果是每周,则是在特定的一天(每周一次)。每月是特定的一天。

我有一个任务表和一个recurring_type_id,并且打算处理代码中的重复任务,但是理想的方法是吗?另一种方法是在创建任务时插入所有任务-
对于每个事件时间。但这似乎也不对。

任何人都可以对设计提出建议,以及如何以可维护和有效的方式进行处理?

我正在使用SQL Server 2008 R2


阅读 143

收藏
2021-03-17

共1个答案

一尘不染

我将创建一个任务表以将我的任务插入其中。

taskTable
|taskID  |Freq   |runAt       |
-------------------------------
|1       |daily  |1           |
|2       |daily  |0           |
|3       |weekly |5           |
|4       |weekly |1           |
|5       |monthly|15          |
|6       |monthly|1           |
|7       |once   |2013-7-4    |

RUNAT的 样片 没有考虑过这样没关系进入什么样的价值。

每周 项目的runAt是任务将在星期几运行。

每月运行 一次 是该任务要运行的月份(我通常会在第一个运行月末任务,因为这样 可以省去 处理该月的哪一天的麻烦,尽管您可以使用它来计算

lastDayOfMonth = datePart(d,dateadd(s,-1,dateadd(mm, datediff(m,0,getdate())+1,0)))

runAt 一次 是任务要运行的实际日期。

然后,我将创建一个每天运行的任务,以查看需要运行的任务。

select  taskID
from    taskTable
where   (freq = 'once' and runAt = convert(varchar(10),getDate(),21))
  or    freq = 'daily'
  or    (freq = 'weekly' and runAt = datePart(dw,getDate()))
  or    (freq = 'monthly' and runAt = datePart(d,getDate())

该查询为我提供了我需要运行的所有任务的所有taskID。

不确定这是否是您要寻找的东西,但希望您会在其中找到有用的东西。

2021-03-17