首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“循环任务”的设计选项

“循环任务”的设计选项
EN

Stack Overflow用户
提问于 2013-01-19 16:28:19
回答 7查看 8.7K关注 0票数 7

非常简单,但就表设计而言,我所关注的领域是重复任务的情况,它可以是一次性的、每天一次的、每周一次的或每月一次的。每月是特定的一天。

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

有没有人能对设计提出建议,以及如何以一种可维护和有效的方式处理这个问题?

我正在使用SQL Server2008 R2

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-01-25 02:53:19

我会创建一个任务表来插入我的任务。

代码语言:javascript
运行
复制
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    |

dailies的runAt不考虑,因此输入什么值都无关紧要。

week items的runAt是任务要运行的星期几。

runAt for mothly是任务要运行的月份的第几天(我通常在第一天运行月末任务,因为这省去了处理月末哪一天的麻烦,尽管您可以使用它来解决这一问题

代码语言:javascript
运行
复制
lastDayOfMonth = datePart(d,dateadd(s,-1,dateadd(mm, datediff(m,0,getdate())+1,0)))

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

然后,我会创建一个每天运行的任务,看看需要运行什么。

代码语言:javascript
运行
复制
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。

我不确定这是否是你想要的,但希望你能从中找到有用的东西。

票数 13
EN

Stack Overflow用户

发布于 2013-01-25 03:26:09

我做了一件非常类似的事情:

代码语言:javascript
运行
复制
   _id
   interval_type
   time
   day
   next

day字段表示时间间隔内的某一天,对于one-shot和daily,该字段为null。表中的next字段用于标识任务下一次运行的时间。在任务应该运行时设备关闭的情况下,需要这样做。您只需要决定如何处理一个或多个错过的间隔。

票数 1
EN

Stack Overflow用户

发布于 2013-01-25 03:41:38

我应该使用一个日期作为参考,如下面的表

代码语言:javascript
运行
复制
taskid      date_reference Freq            distance
----------- -------------- --------------- -----------
1           2011-01-01     daily           NULL
2           2011-01-17     monthly         NULL
3           2013-01-17     weekly          NULL
4           2013-01-24     once            NULL
5           2011-01-01     monthly         NULL
6           2011-01-01     monthly         NULL
7           2011-01-01     before_eomonth  5
8           2013-01-01     loop_day        4
9           2013-01-01     loop_month      4

所以你可以用很多方法来检查周期...

传统的每周、每天、每月和一次。就像长枪的解决方案..

但是你会有几种不同的方式,比如

每4天

每4个月

或5天至月底

或月底

应该考虑在任务循环的末尾加上另一个日期...

但是工作永远不会结束..。所以,它永远不会被使用..;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14412527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档