【问题标题】:Trigger to update record when Value = GETDATE()当 Value = GETDATE() 时触发更新记录
【发布时间】:2013-01-03 12:30:09
【问题描述】:

我对触发器的体验是,它在更新、插入或删除之后会执行某些操作。但是是否可以创建一个触发器以在今天的日期自动更新记录?例如,我有一个有 4 列的表格。

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

这是一条记录,我想要创建一个触发器,当它的EndDate = 今天的日期(GETDATE ())。我该怎么做?

【问题讨论】:

  • 这听起来像是一项日常工作 - 以 link 为例。
  • 我想这就是我现在必须学习的。谢谢:)

标签: sql triggers sql-server-2012 getdate


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    要使您的列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
    

    【讨论】:

      【解决方案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 作业来检查日期是否等于今天并更新您的列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-13
        • 1970-01-01
        • 2014-02-09
        • 2021-06-30
        • 2017-07-22
        • 1970-01-01
        • 2023-01-19
        • 2012-01-08
        相关资源
        最近更新 更多