Как истечь срок действия определенной строки в 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()