MS SQL Trigger für Update

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?

Lesen
http://stackoverflow.com/questions/642822/how-can-i-…

BEFORE gibts nicht

INSTEAD OF UPDATE Triggers gibt es
http://msdn.microsoft.com/en-us/library/ms188601.aspx

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