如何在达到日期后使SQL Server中的特定行到期?

时间:2012-08-23 12:14:55

标签: asp.net sql-server sql-server-2008-express

对于经验丰富的开发人员来说,这可能是一个非常简单的场景,但作为一个初学者,我已经在这里闲逛了很长时间。我正在asp.net中创建一个用户可以购买包的网站。这些包装具有与其相关的一些失效日期(例如,购买后2个月,6个月等)。

问题是如何在我根据购买日期计算的相同日期和时间准确到期每个包裹。怎么做这件事?

我使用的是SQL Server Express Edition 2008和asp.net 4.0。

2 个答案:

答案 0 :(得分:10)

您可以放置​​一个WHERE条款,而不是删除记录,这些条款将根据记录的到期日排除记录:

SELECT PackageName
FROM Package
WHERE ExpiryDate>GETDATE()

但是,如果您仍希望将其从数据库中删除,则可以将SQL Job放在每天/每小时运行的位置,以便删除已过期的记录:

DELETE FROM Package
WHERE ExpiryDate<GETDATE()

答案 1 :(得分:1)

取决于你的意思到期 - 你想删除数据,标记记录,或只是隐藏用户屏幕上的数据。

无论哪种方式,您都需要将到期日期作为列添加到您的表中(?包),并将计算的到期日期保存到此列中。

然后您可以选择以下选项:

  • 运行作业以在记录过期后删除/过期记录,即CURRENT_TIMESTAMP is > ExpiryDate(SQL Express没有SQL代理,因此您需要编写Windows服务或挂钩到Windows任务计划程序要做到这一点)。
  • 或者,更改您的应用程序以“检查”ExpiryDate的值(例如DateTime.Now >= ExpiryDate),然后将用户锁定/隐藏包中的用户。