-1

我有下表:

StartDate | EndDate | Value | Active  - and some other columns

如果小于今天,我想自动设置Active为 false 。EndDate

有什么办法可以做到吗?我正在使用 Sql Server 2008 R2。

我的意思是自动是这样的:

结束日期是 2013 年 9 月 14 日,一旦时钟到达 00:00,今天是 9 月 15 日,我想将该行标记为非活动 - 错误。

4

2 回答 2

1

如果您的意思是update立即运行,那么您可以使用它...

UPDATE  tblName
SET     Active = 'False'
WHERE   CAST(EndDate AS DATE) > CAST(GETDATE() AS DATE)
AND (Active = 'True' OR Active IS NULL)

如果是今天EndDate 之前...

UPDATE  tblName
SET     Active = 'False'
WHERE   CAST(EndDate AS DATE) < CAST(GETDATE() AS DATE)
AND (Active = 'True' OR Active IS NULL)

如果这不是您要查找的内容,请在问题中添加更多具体信息,我会更新答案。

至于自动调用它,您可以设置SQL Server 作业或使用Windows 服务调用计时器上的存储过程。

于 2013-09-14T18:52:25.920 回答
1

我看到您正在寻找它是“自动的”...为什么不使用视图...即:

CREATE VIEW [dbo].[vTest]
AS
    SELECT  [StartDate] ,
            [EndDate] ,
            [Value] ,
            CAST(CASE WHEN loaddate > GETDATE() THEN 1
                      ELSE 0
                 END AS BIT) AS Active
    FROM    TestTable

通过这种方式,您可以处理视图,该视图将自动始终在 Active 的“派生字段”中具有正确的值...

干杯,诺亚

于 2013-09-14T19:13:58.120 回答