在当前时间以后的特定时间触发SQL命令

时间:2016-07-29 07:03:16

标签: sql tsql sql-server-2012

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]是约会应该结束的时间。

我想做的就是:

  • 创建约会时,请检查时间[To],在约会结束时,运行查询以将[Status]更改为 4(已过期)< /强>

  • 编辑约会时,请检查时间[To]并执行与上一步相同的操作

例如:

  • 9.am ,我创建的约会 [To] 2016/07/29 5:00 pm ,所以在下午5:00 时,应运行查询以将此约会的 [状态] 更改为 4 < / LI>

  • 上午10点,我编辑了此约会,我将 [To] 更改为 2016/07/29 7:00 pm ,相反,约会在 5.00 pm 时更改了状态,现在在晚上7点更改了状态。

我认为我应该使用触发器和事件,但我不知道如何实现我的目标。

有人可以帮我吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用触发器,但这不会解决您的问题。您想要的是在后台运行的内容,并在过期时将过期约会的状态更改为4。

有不同的方法来实现这一目标。一种非常简单的方法是创建将定期执行的SQL Server作业代理作业,例如每5分钟甚至1分钟执行一次。

在SQL Server Management Studio中找到您的服务器,最后您应该看到SQL Server作业代理。展开它并在Jobs下创建一个新工作。里面用这样的代码放了一步。

UPDATE A
SET A.Status=4
FROM Appointment A
WHERE A.Status<>4 AND CURRENT_TIMESTAMP>A.[To]

我希望这会有所帮助。