1

我对触发器的经验是它在更新、插入或删除后会做一些事情。但是是否可以创建一个触发器以在今天的日期自动更新记录?例如,我有一个有 4 列的表。

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

这是一条记录,我想要的是创建一个触发器,当它是=今天的日期(GETDATE())时,它将更新该记录的ActiveFalseExpired到该记录。我该怎么做呢?TrueEndDate

4

3 回答 3

2

不,据我所知,您不能在这种情况下使用触发器。当数据/记录发生变化时,触发器被执行。在您的情况下,数据没有改变,只有时间在流逝。

寻找“SQL 作业”来完成此任务。

于 2013-01-03T12:36:00.043 回答
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
于 2013-01-03T12:45:30.983 回答
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

然后您可以从您的视图中选择数据(顺便说一句,我认为您不需要这两列,因为它们相互依赖)

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

于 2013-01-03T12:36:42.873 回答