我对触发器的体验是它在更新,插入或删除后执行某些操作。但有可能创建一个触发器,以便在其日期为今天时自动更新记录吗?例如,我有一个包含4列的表。
StartDate EndDate Active Expired
---------------------------------------------------------------
2013-01-03 2013-01-05 True False
这是一条记录,我想要的是创建一个触发器,将Active
列False
列更新为此记录的Expired
到True
{ {1}} =今天的日期(GETDATE())。我该怎么做?
答案 0 :(得分:2)
不,据我所知,你不能在这种情况下使用触发器。 当数据/记录改变时,执行触发器。 在您的情况下,数据不会改变,只有时间过去了。
寻找“SQL工作”来完成这项任务。
答案 1 :(得分:1)
要使列Active
和Expired
按您希望的方式运行,您应该将它们设为计算列。这些列的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是否等于今天并更新您的列。