SQL Server数据中某个字段的数据怎样到了指定时间自动更改?

2019-01-02 21:02发布

问题:

如图说是,数据库中有这样的字段。现在的要求是:
如果当前时间超过了数据中的Jdate+Jdate3的时间,就将讲座状态设置为“已过期”
比如说到了2018-12-25 12:00,将第二条数据的Jstate自动更改为“已过期”

我原本设置的是,当用户登录时,检测当前时间并进行对比,然后修改状态,但是如果用户量太多了以后,每次登录都要对数据中该表所有数据进行遍历和修改,这会很麻烦。
所以我的想法是:有没有这样一种方法,能让数据库中的数据到了时间就自动检测并更改Jstate状态?
或者用更精简的方法来改变数据库的Jstate属性?不在用户登录的时候检测
需要比较详细的思路,编程代码用的是c#,其他语言的话也都可以

回答1:

可以写一个后台定时任务,定时更新



回答2:

我只说槽点,不是挑刺,解决了槽点,问题自然就解决了。

  1. JDate, Jdate3, JState 这三个字段只需要有两个字段,第三个字段 JState 在数据库设计范式中称为冗余字段。
  2. 这样的冗余字段设计并不是不可以,通常是空间换时间的做法。
  3. 当用户登录时,检测当前时间并进行对比,然后修改状态
    当用户登录时,检测就可以知道状态了,所以改不改状态,或者说状态字段存不存在,其实都是无所谓的。
    再说了,A用户登录,你去遍历整个表,修改B用户和C用户的字段做啥?

  4. 如果是小系统,想在查询的时候,显示“已过期”、“审核通过”等文字,没有JState一样能完成,在UI层做点手脚就行了。
  5. 如果是大一点的系统,我就不说话了....园里的高手太多了。


回答3:

可以用c#搞定时任务,也可以用数据库搞定时任务。



回答4:

SQL server好像有个“作业”的概念,也许能用上



回答5:

写个任务程序放在服务器上自己跑就行了,我们系统有好多状态要检查,就会有很多后台服务在服务器上,让它自己跑就好了



标签: