0

我有一張表,有幾列用作datetime郵票。該表包含以下幾列使用計算列或存儲過程

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

UpDate列由每天進口的計算列ExpDate將隨着時間+ 24小時更新的更新。如果當前日期時間小於ExpDate'N',並且當前日期時間等於或大於ExpDate,我希望Active列指示'Y'

我以爲只是使用存儲過程無限期地運行來檢查這個並根據需要進行更新,但是這樣做沒有意義,並且想知道是否有人對如何執行此操作有任何其他建議。例如,如果我可以使用它作爲計算列以及基於IF語句查詢。

回答

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 
) 
+0

感謝您的答覆。如果我理解正確,你的意思是當我查詢表的記錄時,我想要ExpDate尚未達到,然後設置Active = Y,並將所有其他設置爲N? – vbNewbie

+0

我的意思是你在執行查詢時計算ExpDate和Active。不要在任何地方存儲或更新任何內容,只需將值返回給您的客戶端以執行當前正在執行的查詢。 –

+0

好吧,這很有道理,謝謝 – vbNewbie