Триггер для обновления записи, когда Value = GETDATE()

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

   StartDate         EndDate         Active          Expired 
---------------------------------------------------------------
   2013-01-03      2013-01-05          True           False

это одна запись, я хочу создать триггер, который обновит столбец Active до False и Expired до True этой записи, когда его EndDate = сегодняшняя дата (GETDATE()). Как мне это сделать?


person Bashar Al-Khalili    schedule 03.01.2013    source источник
comment
Похоже, это повседневная работа — см. пример по этой ссылке.   -  person Bridge    schedule 03.01.2013
comment
Думаю, это то, чему я должен научиться сейчас. Спасибо :)   -  person Bashar Al-Khalili    schedule 03.01.2013


Ответы (3)


Нет, насколько я знаю, вы не можете использовать триггер в этой ситуации. Триггеры выполняются при изменении данных/записей. В вашем случае данные не меняются, только время идет.

Найдите «задание SQL», чтобы выполнить эту задачу.

person Jacco    schedule 03.01.2013

Чтобы ваши столбцы Active и Expired вели себя так, как вы хотите, вы должны сделать их вычисляемыми столбцами. SQL для этих столбцов будет таким (при условии, что это столбцы DATE):

--For column Active
CASE WHEN EndDate < CONVERT(DATE,GETDATE()) THEN 1 ELSE 0 END

--For Column Expired
CASE WHEN EndDate >= CONVERT(DATE,GETDATE()) THEN 1 ELSE 0 END
person Lamak    schedule 03.01.2013

ну в вашем случае у вас есть 2 варианта:

создать представление (преобразование getdate() в 112 для удаления времени):

create view <your view name>
as
    select
        T.StartDate,
        T.EndDate,
        case when T.EndDate <= convert(nvarchar(8), getdate(), 112) then 1 else 0 end as Active,
        case when T.EndDate <= convert(nvarchar(8), getdate(), 112) then 1 else 0 end as Expired
    from <your table> as T

И затем вы можете выбрать данные из своего представления (кстати, я не думаю, что вам нужны оба столбца, потому что они зависят друг от друга)

Или вы можете создать задание SQL, чтобы проверить, равна ли дата сегодня, и обновить свои столбцы.

person Roman Pekar    schedule 03.01.2013