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

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

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

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

2 ответов


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

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

затем у вас есть такие параметры, как:

  • запустите задание для удаления / истечения срока действия записи после ее истечения, т. е. CURRENT_TIMESTAMP is > ExpiryDate (SQL Express не имеет агента SQL, поэтому вы нужно было бы, например, написать службу windows или подключиться к планировщику задач Windows для этого).
  • или измените приложение на "проверить" значение ExpiryDate (например,DateTime.Now >= ExpiryDate), а затем заблокировать пользователя / скрыть пакет из пользовательского интерфейса.

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

SELECT PackageName
FROM Package
WHERE ExpiryDate>GETDATE()

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

DELETE FROM Package
WHERE ExpiryDate<GETDATE()