时间触发数据库更新

时间:2014-11-17 19:21:25

标签: sql sql-server

我在SQL Server中有一个数据库表,如下所示

ID | Name | ExpireTime         | CountLeft 
 1   test   11/11/2014 2:30         5 

我想在ExpireTime = currenttime

时更新countLeft = 0

我应该在SQL Server后面的代码中执行此操作吗?

2 个答案:

答案 0 :(得分:2)

此类操作不适用于数据库。触发器是基于事件的,而不是基于时间的。虽然它可能,有点,sorta可以通过经常轮询表的SQL代理作业来完成,该进程必须每秒钟点击才能使其工作,这可能会导致拖拽系统和争用表

然而,有些技术适用于此类事物。您应该查看一个缓存服务器,该服务器允许查找值,该值可以指定到期日期。根据应用程序的设计/需求,您可以在将数据写入缓存服务器的同时将条目写入数据库。

退房:

现在,如果你真的,真的,真的,真的需要从SQL Server处理这个问题,你必须:

  1. 启用快照隔离(以减少争用)
  2. 创建存储过程以执行以下操作:     更新表     SET CountLeft = 0     WHERE ExpireTime< GETDATE();
  3. 创建10个SQL代理作业,其中:
    • 所有10都调用此存储过程
    • 所有10个都设置为"每10秒"
    • 的最小时间间隔
    • 每一个都设置为以不同的秒开始:00,01,02,...,09
  4. 问问自己为什么你没有通过缓存服务器来表达这一点; - )

答案 1 :(得分:0)

从技术上讲,您可以使用Service Broker对话计时器。虽然我怀疑这将是一个完全错误的设计决策的良好实现。