【发布时间】:2011-02-21 19:06:38
【问题描述】:
我有一个数据库,用于记录员工参加课程的时间以及他们下次参加课程的时间(课程往往是年度课程)。
例如,以下员工于 2010 年 1 月 1 日参加了课程“1”,由于该课程是年度课程,因此下一次课程将于 2011 年 1 月 1 日参加。今天是 2010 年 5 月 20 日,课程状态显示为“完成' 即他们已经完成了课程并且不需要再做一次,直到明年:
EmployeeID CourseID AttendanceDate DueDate Status
123456 1 01/01/2010 01/01/2011 Complete
就DueDate 而言,当我更新员工记录时,我会在 SQL 中进行计算,例如DueDate = AttendanceDate + CourseFrequency(我从单独的表中提取课程频率)。
在我的基于 Web 的应用程序 (asp.net mvc) 中,我为所有员工提取了这些数据,并以类似网格的格式显示,供 HR 经理查看。这使 HR 可以确定哪些人需要参加课程。
我遇到的问题如下。
以上面的例子为例,假设今天是 2011 年 1 月 2 日。在这种情况下,员工 123456 现在已逾期,我想将 Status 设置为未完成,以便人力资源经理可以看到他们需要采取行动,即让员工参与课程。
我可以在数据库中构建一个触发器以在夜间运行,以根据当前日期更新所有员工的Status 字段。根据我的阅读,我需要使用 cursors 遍历每一行以修改状态,这被认为是不好的做法/效率低下,或者至少可以避免一些事情???
或者,我可以在从数据库中提取数据之后并在屏幕上显示之前在我的 C# 代码中计算 Status。问题是数据库中的Status 不一定与屏幕上显示的内容相匹配,这对我来说是完全错误的。
有人对解决此类问题的最佳实践方法有任何建议吗?
这很有帮助,如果我确实使用了游标,我怀疑我会在任何给定时间循环超过 1000 条记录。可能体积这么小,用游标就可以了?
【问题讨论】:
标签: sql-server cursor