Wie erstelle ich einen Trigger, der das Datums- und Zeitfeld beim Ändern der Zeile aktualisiert?

10

Ich habe eine Tabelle testtablein der Datenbank erstellt testbase, die die folgende Struktur hat:

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

Wie schreibe ich jedoch einen Trigger so, dass er die bestimmte Zeile aktualisiert, die geändert wurde (oder mit neuen Informationen aktualisiert wurde), und das Änderungsdatum in das expire_dateFeld und die Änderungszeit in das expire_timeFeld aufzeichnet ? (oder wenn das möglich ist?)

Jack
quelle
Haben Sie sich angesehen, wie ein Trigger erstellt wird?
Ja, ich habe mir angesehen, wie der Trigger erstellt wird (Ref: msdn.microsoft.com/en-us/library/ms189799(v=sql.105).aspx ), aber eine Sache stört mich, wie man das UPDATE einfügt Anweisung für die Zeile, die ausgelöst wird, indem die Bedingung wie inWHERE id = Changed_Row_ID
Jack

Antworten:

8

Es wäre ziemlich einfach, aber ich würde tatsächlich empfehlen, die Logik des Befehls, der die Daten einfügt / aktualisiert, so zu ändern, dass an dieser Stelle die zusätzlichen Informationen hinzugefügt werden.

Wenn Sie jedoch mit einem Auslöser fortfahren möchten, können Sie Folgendes tun:

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  

Dies verwendet die INSERTEDTabelle, um herauszufinden, welche product_noZeilen geändert / erstellt wurden. Weitere Informationen zu Triggern finden Sie unter dem folgenden Link:

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

Ich hoffe das hilft dir.

Herr Brownstone
quelle
Ich hätte nie gedacht, dass MS SQL tatsächlich eine Tabelle mit dem Namen bilden wird inserted. Bedeutet das also, dass es sicher ist, keine eigene Datenbanktabelle mit Namen wie insertedund zu haben deleted?
Jack
1
Ja, ich würde empfehlen, keine eigenen Tabellen mit diesen Namen zu haben, nur um Verwirrung zu vermeiden
;-)
Auf der Handbuchseite zum Erstellen eines Auslösers finden Sie einen Link zur folgenden Seite, auf der die Verwendung der eingefügten / gelöschten Tabellen beschrieben wird ( msdn.microsoft.com/en-us/library/ms191300.aspx )
miracle173