Ich arbeite in einer MS SQL 2008 Datenbank und habe mir verschiedene Trigger erstellt (arbeite mich gerade in trigger ein).
Ich suche den Befehl, wie ich auf den Wert eines Datenfeldes vor der Aktualisierung zugreife. Mein Update-Trigger macht für mich nur Sinn, wenn ich den Vorgänger-Wert speichere. Aktuell übernimmt er die neuen Werte in eine Log-Table.
old.Feldname bzw. feldname.oldvalue funktionieren nicht
Gibt es überhaupt solch eine Funktion/Methode?
Hi,
old.Feldname bzw. feldname.oldvalue funktionieren nicht
deleted.Feldname
Einen Update Prozess kann man als einen zweistufigen Prozess betrachten.
Erst löscht man den Record (delete) und dann fügt man ihn mit neuen Werten wieder ein (insert)
Deswegen kannst du innerhalb von Triggern auf zwei Zustände der Tabelle implizit zugreifen, die als Tabelle dargestellt sind.
deleted.[Feldname] für die alten Werte
inserted.[Feldname] auf die neuen Werte
Ein Trigger löst in MSSQL id.dR. nicht für jeden Record, sondern für jede Transaktion aus. Daher kann „inserted“ und „deleted“ mehrere Record enthalten, die gejoint werden müssen.
Gruss
Joey
Danke, hab ein etwas gebraucht, bis ich es richtig verstanden habe, jetzt läuft es:
ALTER TRIGGER [trXYUPDATE] ON [dbo].[XY] FOR UPDATE
AS
insert into logbuch
(Tabelle, Feldname, AlterInhalt, NeuerInhalt, DatensatzID)
select ‚xy‘, ‚Nachname‘, alt.Nachname, neu.Nachname, alt.ID
from inserted as neu inner join deleted as alt on neu.ID=alt.ID