2009-07-08 120 views
1

我正在用会员表单创建图书馆管理应用程序。自动更新状态列

会员类型有:

  1. 半年度
  2. 每年
  3. 赞助人(15分钟)
  4. 终身会员

现在我在SQL Server中设计了一个表2008组成:

  1. 成员Id
  2. 名称
  3. 加入日期
  4. 截止日期
  5. 状态

状态由要么M会员或E过期籍。

现在我想让这个任务自动发生。

例如,如果成员的到期日期是昨天,那么它应该自动将状态更改为E

我该怎么做?

+0

不需要额外的感叹号。人们正在阅读这些问题,希望能帮助你:) – Jared 2009-07-08 04:12:34

+0

你能否更新你的问题标题以避免模棱两可? – Jared 2009-07-08 04:15:00

回答

2

使用过期日期NULL作为您的生活会员会员。然后,create a SQL Server Agent job揭开序幕下面的语句和运行,每15分钟(或5):

UPDATE 
    Membership 
SET 
    Status = 'E' 
WHERE 
    Status = 'M' AND ExpirationDate < getdate() 
    AND ExpirationDate IS NOT NULL 
-1

你可以create a SQL Jobschedule它每天晚上运行,以更新状态标志。这是一个overview让你开始吧。

评论:我不确定您是否将您的数据库视为具有此要求的独立数据源。它看起来更像是更新此状态标志的商业案例。如果稍后更新过期日期,会发生什么情况?您还必须更新状态标志。您可能希望您的应用程序解释过期日期。

感谢, -Tom

+0

感谢您的回复。 其实我没有安装Sql server代理。 你能告诉我SQL SERVER AGENT可以作为FreeWare的链接吗? 请帮我一把! – sheetal 2009-07-08 04:55:48

1

如何使用计算列?

在表设计器内部选择您的状态列,转到列属性并选择节点“计算列指定”。在此输入公式:

CASE WHEN ExpirationDate IS NOT NULL AND ExpirationDate < GETDATE() THEN 'E' ELSE 'M' END 

对此的唯一负面影响是,它无法被索引。

0

如果您正在将记录加载到对象中,为什么不使用对象的属性来向您显示“member”/“expired”?

这种自动操作并不适合持久性数据存储。如果您真的需要,可以使用Greco建议的计算列,但正确地指出这可能会演变为性能问题。