Sql server 2005 Sqlserver监视时间变化

Sql server 2005 Sqlserver监视时间变化,sql-server-2005,Sql Server 2005,我在SQL Server 2005中有一个表,其中有一个名为lock的字段,该字段将锁定用户对其数据的更改。在我设计的整个应用程序中,此锁可以在不同点激活,但是我有另一列,表示截止日期,基本上数据可以在两个日期之间更改。开始日期是管理员决定向所有人开放的日期。我想知道是否有一种方法可以代替使用作业或服务,让sql server根据截止日期时间检查其时间,并自动标记锁定的标志。就像SQLServer的文件系统观察者一样,我要记住,我会有很多记录,所有记录都有不同的截止日期 您必须创建一个作业,以便

我在SQL Server 2005中有一个表,其中有一个名为lock的字段,该字段将锁定用户对其数据的更改。在我设计的整个应用程序中,此锁可以在不同点激活,但是我有另一列,表示截止日期,基本上数据可以在两个日期之间更改。开始日期是管理员决定向所有人开放的日期。我想知道是否有一种方法可以代替使用作业或服务,让sql server根据截止日期时间检查其时间,并自动标记锁定的标志。就像SQLServer的文件系统观察者一样,我要记住,我会有很多记录,所有记录都有不同的截止日期

您必须创建一个作业,以便使用SQL Server作业或Windows服务对现有架构执行此操作

如果可以更改表结构,则可以在表中添加计算列,该列将基于现有锁和截止日期逻辑锁定行。您将无法索引此新计算列,因为它使用GETDATE。要了解有关计算列的更多信息,可以参考

在这个模式中,您必须

更新手动锁定的原始锁定列 请参阅“新建锁定”列以检查行是否已锁定 要创建计算列,可以尝试以下操作

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;

嗨,谢谢。我不知道为什么我没有想到计算列,我会试试的