使用计算列或存储过程

时间:2013-01-02 16:27:22

标签: sql-server-2008 tsql datetime stored-procedures calculated-columns

我有一个包含几列用作datetime标记的表格。该表包含以下列

UpDate      datetime
SearchDate  datetime
ExpDate     dateadd(hour,24,UpDate)
Active      nvarchar(5)

当每日导入更新UpDate列时,计算列ExpDate将更新时间+ 24小时。当当前日期时间小于Active时,我希望'Y'列指示ExpDate当前日期时间等于或大于{{1}时'N' }}

我想过只使用存储过程无限期运行来检查并根据需要进行更新,但这样做没有意义,并且想知道是否有人对如何执行此操作有任何其他建议。例如,如果我可以根据IF语句查询将其用作计算列。

1 个答案:

答案 0 :(得分:2)

除非你有充分的理由坚持ExpDateActive的计算,否则我认为你应该在对你的桌子的查询中进行计算。

这样的事情:

select [UpDate],
       SearchDate,
       dateadd(hour, 24, SearchDate) as ExpDate,
       case when getdate() >= dateadd(hour, 24, SearchDate)
         then 'N' 
         else 'Y' 
       end as Active
from YourTable

如果您想要计算列,您的DDL将如下所示:

create table YourTable
(
  [UpDate] datetime,
  SearchDate datetime,
  ExpDate as dateadd(hour, 24, SearchDate),
  Active as case when getdate() >= dateadd(hour, 24, SearchDate)
              then 'N' 
              else 'Y' 
            end
)