Как создать триггер, который обновляет поле даты и время при изменении строки?

10

Я создал таблицу testtableвнутри базы данных, testbaseкоторая имеет следующую структуру:

product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)

Однако как мне написать триггер так, чтобы он обновлял эту конкретную строку, которая была изменена (или обновлена ​​с новой информацией), и записывал дату модификации в expire_dateполе и время модификации в expire_timeполе? (или если это возможно?)

Джек
источник
Вы смотрели, как создается триггер?
да, я смотрел на то, как триггер создается (Ref: msdn.microsoft.com/en-us/library/ms189799(v=sql.105).aspx ) , но одна вещь беспокоит меня то , что , как делает один вкладыш в UPDATE оператор для строки, которая запускается путем получения правильного условия, как вWHERE id = Changed_Row_ID
Джек

Ответы:

8

Это было бы довольно просто, но я бы порекомендовал изменить логику команды, которая вставляет / обновляет данные, чтобы она добавила дополнительную информацию на этом этапе.

Однако, если вы хотите использовать триггер, вы можете сделать что-то вроде этого:

create trigger my_trigger
on my_table
after insert, update
as
begin
declare @dt datetime = getdate();
update a
set expire_date = CONVERT(DATE, @dt, 101),
    expire_time = CONVERT(TIME, @dt)
from my_table as a
join inserted as b 
on a.product_no = b.product_no; 
end
go  

Это использует INSERTEDтаблицу, чтобы узнать, какие product_noстроки были изменены / созданы. Вы можете узнать больше о триггерах по ссылке ниже:

http://msdn.microsoft.com/en-us/library/ms189799.aspx

Я надеюсь, это поможет вам.

Mr.Brownstone
источник
Я никогда не думал, что MS SQL на самом деле сформирует таблицу с именем inserted. Значит ли это, что было бы безопасно не иметь свою собственную таблицу базы данных с такими именами, как insertedи deleted?
Джек
1
Да, я бы порекомендовал не иметь своих собственных таблиц с этими именами, чтобы избежать путаницы ;-)
Mr.Brownstone
на странице создания ручного запуска вы можете найти ссылку на следующую страницу , описывающую использование вставленных / удаленных таблиц ( msdn.microsoft.com/en-us/library/ms191300.aspx )
miracle173