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

viv*_*vek 9 sql-server asp.net sql-server-2008-express

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

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

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

Cur*_*urt 10

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

SELECT PackageName
FROM Package
WHERE ExpiryDate>GETDATE()
Run Code Online (Sandbox Code Playgroud)

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

DELETE FROM Package
WHERE ExpiryDate<GETDATE()
Run Code Online (Sandbox Code Playgroud)


Stu*_*tLC 1

取决于您所说的过期的含义 - 您是要删除数据、标记记录还是只是从用户屏幕上隐藏数据。

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

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

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