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?)


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.