Jak utworzyć wyzwalacz, który aktualizuje pole daty i pole czasu po zmodyfikowaniu wiersza?

10

W testtablebazie danych utworzyłem tabelę testbaseo następującej strukturze:

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

Jak jednak napisać wyzwalacz, aby zaktualizował ten konkretny wiersz, który został zmodyfikowany (lub zaktualizowany o nowe informacje) i zapisał datę modyfikacji w expire_datepolu, a czas modyfikacji w expire_timepolu? (lub jeśli to jest możliwe?)

Jacek
źródło
Czy spojrzałeś na sposób tworzenia wyzwalacza?
tak, patrzyłem na sposób tworzenia wyzwalacza (Ref: msdn.microsoft.com/en-us/library/ms189799(v=sql.105).aspx ), ale jedno mnie niepokoi, to w jaki sposób wstawić UPDATE instrukcja dla wiersza, który jest wyzwalany przez uzyskanie poprawnego warunku jak wWHERE id = Changed_Row_ID
Jack

Odpowiedzi:

8

Byłoby to dość łatwe, ale tak naprawdę poleciłbym zmianę logiki polecenia, które wstawia / aktualizuje dane, aby dodało w tym momencie dodatkowe informacje.

Jeśli jednak chcesz uruchomić wyzwalacz, możesz zrobić coś takiego:

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  

Korzysta z INSERTEDtabeli, aby znaleźć product_nowiersze, które zostały zmienione / utworzone. Możesz dowiedzieć się więcej o wyzwalaczach, klikając poniższy link:

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

Mam nadzieję, że to Ci pomoże.

Mr.Brownstone
źródło
Nigdy nie myślałem, że MS SQL faktycznie utworzy tabelę o nazwie inserted. Czy to oznacza, że ​​byłoby bezpiecznie nie mieć własnej tabeli bazy danych o nazwach takich jak insertedi deleted?
Jack
1
Tak, polecam nie mieć własnych tabel z tymi nazwami, aby uniknąć pomyłek ;-)
Mr.Brownstone
na stronie podręcznika tworzenia wyzwalacza można znaleźć link do następnej strony opisującej użycie wstawionych / usuniętych tabel ( msdn.microsoft.com/en-us/library/ms191300.aspx )
miracle173