SQL触发器,根据当前和结束时间评估更新位字段

时间:2018-01-25 06:47:08

标签: sql sql-server

[编辑,因为目标似乎不清楚]

考虑以下数据(不一定是表格):

| currentDate (day of query) | expiryDate  |isOK |
|----------------------------|-------------|-----|
| 25.01.2018                 |26.01.2018   |True |
| 24.01.2018                 |23.01.2018   |False|

以上数据/条目的移植:

在18.01.2018,我们检查机器是否仍然正常。理想情况下,数据库应将“isOk”字段简单地设置为“True”。 如果在24.01.2018我们检查“isOk”,它应该由DB设置为False。

总体目标是:

  • 输入每件设备的失效日期。
  • 每天数据库都会对“isOK”字段执行更新,并根据今天的日期和到期日期进行设置。
  • 让一个字段由DB通过每日查询/作业自动设置,以获取isOk字段。

当然,这也可以通过编程方式实现:

  • 基本上,有效期和当前日期之间的差异必须始终为> = 1,否则我们会认为机器资格已过期。

此外,如果有另一个计算列显示到期前剩余天数,可能会更好,更新方式与“isOk”列相同。

这可行吗?如果是,SQL代码将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

如果您希望根据todayDate和EndDate列中的值更改来更改isOk列,请根据其他2列将isOk归档为计算字段

假设如果在今天的1周内EndDate,则希望isOK字段为True。你可以试试这个

CREATE TABLE MyTable
(
  TodayDate DATE,
  EndDate DATE,
  IsOk AS (CASE WHEN DATEDIFF(DD,EndDate,TodayDate) BETWEEN 0 AND 7 THEN 'True' ELSE 'False' END)
)

INSERT INTO MyTable(TodayDate,EndDate)
SELECT GETDATE(),GETDATE()+10
UNION
SELECT GETDATE(),GETDATE()-10
UNION
SELECT GETDATE(),GETDATE()+7
UNION
SELECT GETDATE(),GETDATE()-7

SELECT
    *
    FROM MyTable

我的结果

enter image description here