Як створити тригер, який оновлює поле дати та часове поле при зміні рядка?


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поле? (або якщо це можливо?)


Ви подивилися, як створюється тригер?

так, я переглянув, як створюється тригер (Посилання: msdn.microsoft.com/en-us/library/ms189799(v=sql.105).aspx ), але одне мене турбує: це як вставити ОНОВЛЕННЯ для рядка, який запускається, виправляючи умову як у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

Я сподіваюся, що це вам допоможе.


Я ніколи не думав, що MS SQL насправді формуватиме таблицю під назвою inserted. Отже, чи означає це, що було б безпечно не мати власної таблиці баз даних, щоб мати ім’я, наприклад, insertedта deleted?
Джек

1
Так, я б рекомендував не мати власних таблиць із цими назвами, щоб уникнути плутанини ;-)
Mr.Brownstone,

на сторінці керівництва по створенню тригера ви можете знайти посилання на наступну сторінку, що описує використання вставлених / видалених таблиць ( msdn.microsoft.com/en-us/library/ms191300.aspx )
miracle173
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.