Come creare un trigger che aggiorna il campo data e il campo ora alla modifica della riga?


10

Ho creato una tabella testtableall'interno del database testbaseche ha la seguente struttura:

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

Tuttavia, come posso scrivere un trigger in modo tale da aggiornare quella particolare riga che è stata modificata (o aggiornata con nuove informazioni) e registrare la data di modifica nel expire_datecampo e l'ora di modifica nel expire_timecampo? (o se questo è possibile?)


Hai visto come viene creato un trigger?

sì, ho visto come viene creato il trigger (Rif .: msdn.microsoft.com/en-us/library/ms189799(v=sql.105).aspx ) ma una cosa mi dà fastidio è che come si inserisce l'AGGIORNAMENTO istruzione per la riga che viene attivata ottenendo la condizione corretta come inWHERE id = Changed_Row_ID
Jack

Risposte:


8

Sarebbe abbastanza semplice, ma in realtà consiglierei di cambiare la logica del comando che sta inserendo / aggiornando i dati in modo da aggiungere le informazioni aggiuntive a questo punto.

Tuttavia, se desideri procedere con un trigger, potresti fare qualcosa del genere:

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  

Questo utilizza la INSERTEDtabella per scoprire product_nole righe che sono state modificate / create. Puoi trovare ulteriori informazioni sui trigger al link seguente:

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

Spero che questo ti aiuta.


Non avrei mai pensato che MS SQL formasse effettivamente una tabella chiamata inserted. Quindi, ciò significa che sarebbe sicuro non avere la propria tabella di database per avere un nome come insertede deleted?
Jack,

1
Sì, consiglierei di non avere i tuoi tavoli con questi nomi solo per evitare confusione ;-)
Mr.Brownstone,

nella pagina del manuale del trigger di creazione è possibile trovare un collegamento alla pagina seguente che descrive l'uso delle tabelle inserite / eliminate ( msdn.microsoft.com/en-us/library/ms191300.aspx )
miracle173
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.