Sqlserver监视时间的变化

时间:2015-04-08 09:40:04

标签: sql-server-2005

我在SQL Server 2005中有一个表,其中一个名为lock的字段会阻止用户更改他们的数据,这个锁可以在我设计的整个应用程序的各个点激活,但是我有另一个列意味着剪切关闭日期,基本上可以在两个日期之间更改数据。开始日期是管理员决定向所有人开放的日期。我想知道而不是使用作业,或者服务是否有办法让sql server检查其时间与日期时间的缩短并标记自动锁定标志。几乎像sql server的文件系统观察者,请记住,我将有相当多的记录,所有记录都有不同的截止日期。

1 个答案:

答案 0 :(得分:0)

您必须使用SQL Server作业或Windows服务创建一个使用现有架构执行的作业。

如果您可以更改表结构,则可以在表中添加Computed列,该列将根据现有锁定以及基于截止日期逻辑锁定行。您将无法index这个新的计算列,因为它使用GETDATE()。要了解有关计算列的更多信息,请参阅here

在此架构中,您必须

  1. 更新原始锁定列以进行手动锁定
  2. 请参阅新锁定列以检查行是否已锁定
  3. 要创建计算列,您可以尝试这样的方法。

    CREATE TABLE data
    (
        dataid int identity(1,1) primary key,
        value VARCHAR(30),
        startdate date,
        cutoffdate date,
        old_lock bit,
        lock as ( CASE WHEN (cutoffdate <= GETDATE()) OR old_lock = 1 THEN 1 ELSE 0 END)
    )
    
    INSERT INTO data values('row lock by manual lock','2010-01-01','2099-01-01',1),
    ('row lock by auto lock','2010-01-01','2010-01-02',0),
    ('row unlocked','2010-01-01','2099-01-01',0),
    ('row locked','2010-01-01','2011-01-01',1)
    
    SELECT * FROM data;