当 Value = GETDATE() 时触发更新记录
Posted
技术标签:
【中文标题】当 Value = GETDATE() 时触发更新记录【英文标题】:Trigger to update record when Value = GETDATE() 【发布时间】:2013-01-03 12:30:09 【问题描述】:我对触发器的体验是,它在更新、插入或删除之后会执行某些操作。但是是否可以创建一个触发器以在今天的日期自动更新记录?例如,我有一个有 4 列的表格。
StartDate EndDate Active Expired
---------------------------------------------------------------
2013-01-03 2013-01-05 True False
这是一条记录,我想要创建一个触发器,当它的EndDate
= 今天的日期(GETDATE ())。我该怎么做?
【问题讨论】:
这听起来像是一项日常工作 - 以 link 为例。 我想这就是我现在必须学习的。谢谢:) 【参考方案1】:不,据我所知,您不能在这种情况下使用触发器。 当数据/记录发生变化时,触发器被执行。 在您的情况下,数据没有变化,只是时间在流逝。
寻找“SQL 作业”来完成此任务。
【讨论】:
【参考方案2】:要使您的列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
【讨论】:
【参考方案3】:在您的情况下,您有两个选择:
创建一个视图(将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 作业来检查日期是否等于今天并更新您的列。
【讨论】:
以上是关于当 Value = GETDATE() 时触发更新记录的主要内容,如果未能解决你的问题,请参考以下文章