最好在 ASP.NET 中的配置数据库中的行在一段时间后删除

发布时间: 2017/3/26 0:40:25
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

假设我像我的数据库中有一个表

                           Registrants
=======================================================================
  id |    name    |            email        |    registration_date
=======================================================================
  1  |   "Sam"    | "sammypie49@gmail.com"  |    "2016-03-26T14:25:10"
-----------------------------------------------------------------------
  2  |   "Bob"    | "bthebuilder@msn.com"   |    "2015-12-01T10:09:30"
-----------------------------------------------------------------------
  .  |     .      |           .             |              .
-----------------------------------------------------------------------
  .  |     .      |           .             |              .
-----------------------------------------------------------------------
  .  |     .      |           .             |              .
-----------------------------------------------------------------------
  .  |     .      |           .             |              .

和我想要每个注册人将被自动删除,说,注册后的 100 天。什么是适当的办法做到这一点,和最佳的方式是什么?

我打算做它的劣质的方式要创建存储过程

CREATE PROCEDURE FlushOldRegistrants
AS
BEGIN
   DELETE FROM Registrants WHERE DATEADD(day,100,registration_date) < GETDATE()
END

和我的服务器端代码中调用该存储过程,每隔一段时间喜欢

Script.SetInterval(delegate {
    using (var conn = new SqlConnection(connectionString))
using (var command = new SqlCommand("FlushOldRegistrants", conn) { 
                           CommandType = CommandType.StoredProcedure }) {
   conn.Open();
   command.ExecuteNonQuery();
   conn.Close();
}
 }, 60000); // flush old registrants every hour

但是,能做到所有在数据库级别吗?是它可能创建的 T-SQL TRIGGER ,这样做吗?或有更好的办法吗?

解决方法 1:

最显而易见的方法是使用 SQL Server Agent 。设置运行每一天或后一周,作业,就调用存储的过程。

另一个选项是将所有数据都保留在表中并创建视图︰

create view v_Registrants as
   select r.*
   from Registrants r
   where registration_date < DATEADD(day, -100, getdate()) ;

当你通过视图访问数据时,您将只看到最新的数据。 这种方法的优点之一是它是精确 — — 你不会是一种危险的数据就是 102 天老或老 — — 100 天 8 小时使用预定的作业。 事实上,如果确切截止是重要的你可能想要此视图,以及这份工作。

在这两种情况下,你是用这更安全 where 语句,因为它可以让使用索引 (和因此应该更快)。

官方微信
官方QQ群
31647020