首页 新闻 会员 周边 捐助

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

0
悬赏园豆:50 [已解决问题] 解决于 2018-12-14 08:51

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

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

空眠的主页 空眠 | 初学一级 | 园豆:127
提问于:2018-12-11 11:47
< >
分享
最佳答案
0

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

收获园豆:25
chester·chen | 小虾三级 |园豆:507 | 2018-12-11 12:23

谢谢哦,我尝试一下

空眠 | 园豆:127 (初学一级) | 2018-12-11 12:47
其他回答(4)
1

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

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

  4. 如果是小系统,想在查询的时候,显示“已过期”、“审核通过”等文字,没有JState一样能完成,在UI层做点手脚就行了。
  5. 如果是大一点的系统,我就不说话了....园里的高手太多了。
收获园豆:10
爱编程的大叔 | 园豆:30844 (高人七级) | 2018-12-11 12:44

谢谢哦,原本的设计的确是想着用空间换时间的,结果导致现在我有点过分关注Jstate了,没想到用其他方式来判断

支持(0) 反对(0) 空眠 | 园豆:127 (初学一级) | 2018-12-11 12:54

@空眠: 个人觉得,你这个JState字段的冗余设计,由于会随时间的漂移产生变化,而不是完全决定于另外两个字段,而是决定于三个字段,一个是现实的时间。
那么就会产生新的问题,必须定期维护,而这个定期,问题就来了,多长的一个时间才是合理的?
这取决于你这个数据表,和字段的具体业务场景,你的业务规模,你的用户性质。
这些才是决定设计和解决方案的关键。
然而这些都没有提供。所以是没有办法给出具体的解决方案的。最多就是大概的,定时任务。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2018-12-11 14:51
0

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

收获园豆:5
保镖 | 园豆:759 (小虾三级) | 2018-12-11 13:28
0

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

收获园豆:5
会长 | 园豆:12463 (专家六级) | 2018-12-11 13:36
0

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

收获园豆:5
jqw2009 | 园豆:2341 (老鸟四级) | 2018-12-11 16:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册