Как истечь срок действия определенной строки в SQL Server после достижения даты?

Это может быть очень простой сценарий для опытных разработчиков, но я, как новичок, уже давно с этим сталкиваюсь. Я создаю веб-сайт в asp.net, где пользователь может приобрести пакеты. Эти пакеты имеют определенный срок действия, связанный с ними (например, 2 месяца после покупки, 6 месяцев и т. д.).

Проблема в том, как истечь срок действия каждого пакета точно в ту же дату и время, которые я рассчитал на основе даты покупки. Как это сделать?

Я использую SQL Server Express Edition 2008 и asp.net 4.0.


person vivek    schedule 23.08.2012    source источник
comment
Что вы имеете в виду под сроком действия? Удалить из базы? Пометить поле как просроченное?   -  person robert    schedule 23.08.2012
comment
@WaqarJanjua Это не триггер, если это произошло через n месяцев.   -  person Meryovi    schedule 23.08.2012
comment
@Meryovi Я думаю, может быть, он захочет удалить через какое-то время автоматически.   -  person Waqar Janjua    schedule 23.08.2012
comment
@WaqarJanjua Я считаю, что это будет работа, а не триггер.   -  person Meryovi    schedule 23.08.2012
comment
Я просто хочу показать пользователю, что срок действия его купленного пакета истек, это можно сделать, обновив статус как просроченный. но когда я должен запустить этот запрос на обновление? Это проблема.   -  person vivek    schedule 24.08.2012


Ответы (2)


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

В любом случае вам нужно добавить дату истечения срока действия в качестве столбца в вашу таблицу (?packages) и сохранить рассчитанную дату истечения срока действия в этом столбце.

Затем у вас есть такие варианты, как:

  • Запустите задание, чтобы удалить / истечь срок действия записи после истечения срока ее действия, то есть CURRENT_TIMESTAMP is > ExpiryDate (в SQL Express нет агента SQL, поэтому вам потребуется, например, написать службу Windows или подключиться к планировщику задач Windows, чтобы сделать это).
  • Или измените свое приложение, чтобы «проверить» значение ExpiryDate (например, DateTime.Now >= ExpiryDate), а затем заблокировать пользователя/скрыть пакет из пользовательского интерфейса.
person StuartLC    schedule 23.08.2012
comment
Может быть, служба Windows может работать в этом случае. Сначала попробую этот вариант. - person vivek; 24.08.2012

Вместо того, чтобы удалять записи, вы можете добавить пункт WHERE, который исключит записи на основе даты истечения срока их действия:

SELECT PackageName
FROM Package
WHERE ExpiryDate>GETDATE()

Однако, если вы все же хотите удалить их из базы данных, вы можете поместить задание SQL на месте, которое запускается каждый день/час и т. д., что приведет к удалению записей с истекшим сроком действия:

DELETE FROM Package
WHERE ExpiryDate<GETDATE()
person Curt    schedule 23.08.2012