从当前时间起在特定时间触发SQL命令
问题描述:
CREATE TABLE Appointment
(
Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
Maker INT NOT NULL,
Target INT NOT NULL,
[From] DateTime NOT NULL,
[To] DateTime NOT NULL,
Note NVARCHAR(128) NOT NULL,
Created FLOAT NOT NULL,
LastModified FLOAT,
LastModifiedNote NVARCHAR(128),
[Status] TINYINT NOT NULL
FOREIGN KEY (Maker) REFERENCES Person(Id),
FOREIGN KEY (Target) REFERENCES Person(Id)
)
让我解释一下我的表中的一些信息:该表是关于人与人之间的约会信息。 [From]
是什么时候应该开始约会,[To]
是约会应该结束的时间。从当前时间起在特定时间触发SQL命令
所有我想要做的是:
在创建约会,检查时间
[To]
,当时任命应该结束,查询运行改变[Status]
到4(已过期)当预约编辑,检查时间
[To]
,做同样的事情上面
例如:
在9.am,我创建约见[到]是2016年7月29日下午5:00,所以在下午5:00,查询应该运行到这一任命的改变[状态]到
在上午10点,我编辑的这一任命,我改变[转]到2016年7月29日下午7:00,而不是任命改变了这种状况在下午5时,现在则是在改变其状态7:00 pm。
我想我应该使用触发器和事件,但我不知道如何实现我的目标。
任何人都可以帮助我吗?
谢谢。
答
您可以使用触发器,但这不会解决您的问题。你想要的是一些将在后台运行的东西,并在到期时将过期约会的状态更改为4。
有不同的方法来实现这一点。一种非常简单的方法是创建一个定期执行的SQL Server作业代理作业,例如每5分钟甚至1分钟执行一次。
在SQL Server Management Studio中找到您的服务器,最后您应该看到SQL Server工作代理。展开它并在作业下创建一个新作业。里面的代码就像这样。
UPDATE A
SET A.Status=4
FROM Appointment A
WHERE A.Status<>4 AND CURRENT_TIMESTAMP>A.[To]
我希望这会有所帮助。
如何使用其他状态?如果它的值始终可以从其他数据中确定,那么您可能需要考虑根本不存储它 - 或将其作为计算列。 –
[状态]用于显示约会是活动还是过期。 1:有效,4已过期。 – Redplane
你应该在插入和更新时创建触发器 –