sqlserver监听时间变化
Sqlserver watch for time change
我在 SQL Server 2005 中有一个 table,它有一个名为 lock 的字段,它会锁定用户以防止更改他们的数据,这个锁可以在整个应用程序的不同点激活我是设计,但是我有另一列表示截止日期,基本上可以在两个日期之间更改数据。开始日期是管理员决定向所有人开放的时间。我想知道而不是使用作业,或者有一种服务可以让 sql 服务器根据日期时间的削减检查它的时间并自动标记标记锁定。几乎就像 sql 服务器的文件系统观察器,请记住我将有相当多的记录,所有记录都有不同的截止日期。
您将必须使用 SQL 服务器作业或 Windows 服务创建一个作业来使用现有架构来完成它。
如果您可以更改 table 结构,则可以在 table 中添加一个 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;
我在 SQL Server 2005 中有一个 table,它有一个名为 lock 的字段,它会锁定用户以防止更改他们的数据,这个锁可以在整个应用程序的不同点激活我是设计,但是我有另一列表示截止日期,基本上可以在两个日期之间更改数据。开始日期是管理员决定向所有人开放的时间。我想知道而不是使用作业,或者有一种服务可以让 sql 服务器根据日期时间的削减检查它的时间并自动标记标记锁定。几乎就像 sql 服务器的文件系统观察器,请记住我将有相当多的记录,所有记录都有不同的截止日期。
您将必须使用 SQL 服务器作业或 Windows 服务创建一个作业来使用现有架构来完成它。
如果您可以更改 table 结构,则可以在 table 中添加一个 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;