加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – “重复任务”的设计选项

发布时间:2021-01-17 12:13:58 所属栏目:MsSql教程 来源:网络整理
导读:我正在编写一个处理人员任务的小应用程序.非常简单,但就表设计而言,我所坚持的区域是一个重复任务的情况,可以是一次性,每天,每周或每月.如果是每周一次,那就是每周特定的一天.每月是特定的一天. 我有一个任务表和一个recurring_type_id,并且将在代码中处理

我正在编写一个处理人员任务的小应用程序.非常简单,但就表设计而言,我所坚持的区域是一个重复任务的情况,可以是一次性,每天,每周或每月.如果是每周一次,那就是每周特定的一天.每月是特定的一天.

我有一个任务表和一个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.

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

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读