我正在编写一个处理人员任务的小应用程序.非常简单,但就表设计而言,我所坚持的区域是一个重复任务的情况,可以是一次性,每天,每周或每月.如果是每周一次,那就是每周特定的一天.每月是特定的一天.
我有一个任务表和一个recurring_type_id,并且将在代码中处理重复的任务,但这是理想的方法吗?另一种方法是在创建任务时插入所有任务 – 每个事件时间.但这似乎也不正确.
任何人都可以就设计提出建议,以及如何以可维护和有效的方式处理这个问题?
我正在使用sql Server 2008 R2
解决方法
我会创建一个任务表来插入我的任务.
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 for dailies从未被考虑过,因此输入的值无关紧要.
每周项目的runAt是任务运行的星期几.
runAt for mothly是任务运行的月份的一天(月末任务我通常在第一天运行,因为这样可以省去处理月份哪一天结束的麻烦,尽管你可以用它来解决这个问题
lastDayOfMonth = datePart(d,dateadd(s,-1,dateadd(mm,datediff(m,getdate())+1,0)))
runAt for once是任务运行的实际日期.
然后我创建一个每天运行的任务,看看需要运行什么.
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.
不确定这是否是你想要的,但希望你能找到有用的东西.