Использовать вычисляемый столбец или хранимую процедуру

У меня есть таблица с несколькими столбцами, которые используются как штампы datetime. Таблица содержит следующие столбцы

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

Когда столбец UpDate обновляется ежедневным импортом, вычисляемый столбец ExpDate будет обновлен со временем + 24 часа. Я хотел бы, чтобы столбец Active указывал 'Y', когда текущая дата и время меньше, чем ExpDate, и 'N', когда текущая дата и время равна или больше, чем ExpDate.

Я думал просто использовать хранимую процедуру для бесконечного запуска, чтобы проверить это и обновить по мере необходимости, но это не имеет смысла делать, и хотел бы знать, есть ли у кого-нибудь другие предложения о том, как это сделать. Например, если я могу использовать это как вычисляемый столбец на основе запроса оператора IF.


person vbNewbie    schedule 02.01.2013    source источник


Ответы (1)


Если у вас нет веских причин продолжать вычисление ExpDate и Active, я думаю, вам следует выполнить расчет в своих запросах к вашей таблице.

Что-то вроде этого:

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
)
person Mikael Eriksson    schedule 02.01.2013
comment
Спасибо за ваш ответ. Если я правильно понимаю, вы имеете в виду, когда я запрашиваю таблицу для записей, которые мне нужны, где ExpDate еще не достигнут, тогда установите Active = Y, а для всех остальных установите N? - person vbNewbie; 02.01.2013
comment
Я имею в виду, что вы вычисляете и ExpDate, и Active в момент выполнения запроса. Нигде не хранить и ничего не обновлять, а просто возвращать значения вашему клиенту для запроса, который в данный момент выполняется. - person Mikael Eriksson; 02.01.2013