当Value = GETDATE()时触发更新记录

时间:2013-01-03 12:30:10

标签: sql triggers sql-server-2012 getdate

我对触发器的体验是它在更新,插入或删除后执行某些操作。但有可能创建一个触发器,以便在其日期为今天时自动更新记录吗?例如,我有一个包含4列的表。

   StartDate         EndDate         Active          Expired 
---------------------------------------------------------------
   2013-01-03      2013-01-05          True           False

这是一条记录,我想要的是创建一个触发器,将ActiveFalse列更新为此记录的ExpiredTrue { {1}} =今天的日期(GETDATE())。我该怎么做?

3 个答案:

答案 0 :(得分:2)

不,据我所知,你不能在这种情况下使用触发器。 当数据/记录改变时,执行触发器。 在您的情况下,数据不会改变,只有时间过去了。

寻找“SQL工作”来完成这项任务。

答案 1 :(得分:1)

要使列ActiveExpired按您希望的方式运行,您应该将它们设为计算列。这些列的sql就是这样(假设它们是DATE列):

--For column Active
CASE WHEN EndDate < CONVERT(DATE,GETDATE()) THEN 1 ELSE 0 END

--For Column Expired
CASE WHEN EndDate >= CONVERT(DATE,GETDATE()) THEN 1 ELSE 0 END

答案 2 :(得分:0)

在你的情况下你有两个选择:

创建一个视图(将getdate()转换为112以删除时间):

create view <your view name>
as
    select
        T.StartDate,
        T.EndDate,
        case when T.EndDate <= convert(nvarchar(8), getdate(), 112) then 1 else 0 end as Active,
        case when T.EndDate <= convert(nvarchar(8), getdate(), 112) then 1 else 0 end as Expired
    from <your table> as T

然后你可以从你的视图中选择数据(BTW,我认为你不需要两个列,因为它们相互依赖)

或者您可以创建一个SQL作业来检查Date是否等于今天并更新您的列。