我在SQL Server 2005中有一个表,其中一个名为lock的字段会阻止用户更改他们的数据,这个锁可以在我设计的整个应用程序的各个点激活,但是我有另一个列意味着剪切关闭日期,基本上可以在两个日期之间更改数据。开始日期是管理员决定向所有人开放的日期。我想知道而不是使用作业,或者服务是否有办法让sql server检查其时间与日期时间的缩短并标记自动锁定标志。几乎像sql server的文件系统观察者,请记住,我将有相当多的记录,所有记录都有不同的截止日期。
答案 0 :(得分:0)
您必须使用SQL Server作业或Windows服务创建一个使用现有架构执行的作业。
如果您可以更改表结构,则可以在表中添加Computed
列,该列将根据现有锁定以及基于截止日期逻辑锁定行。您将无法index
这个新的计算列,因为它使用GETDATE()
。要了解有关计算列的更多信息,请参阅here。
在此架构中,您必须
要创建计算列,您可以尝试这样的方法。
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;