Triggerproblem

20/05/2010 - 16:52 von Susanne Senger | Report spam
Hallo, NG,

ich habe ein Problem mit einem Trigger:, und zwar soll dieser Trigger eine
Tabelle in Bezug auf Änderungen überwachen und diese Änderungen in eine
separate Tabelle schreiben.

mein Code:
create trigger [dbo].[tr_Tabelle_Modify] on [dbo].[Tabelle]
For
delete, update
as

Begin
Set NOCOUNT ON
Insert into tblProtokoll
(Spaltennamen)
Select 'Neue Werte' as Typ, (restliche Spaltennamen)
from Tabelle
Where ID select ID from inserted

Set NOCOUNT ON
Insert into tblProtokoll
(Spaltennamen)
Select Alte Werte' as Typ, (restliche Spaltennamen)
from Tabelle
Where ID select ID from deleted

Set NOCOUNT OFF

im Prinzip funktioniert der Trigger, nur ist meine Idee natürlich, dass ich
unter dem Eintrag Alte Werte die Daten finde, die vor der Änderung in der
Tabelle standen, wàhrend ich bei Neue Werte erwarten würde, dass die neuen,
also abgeànderten Daten erscheinen. Tatsàchlich aber bekomme ich "Alte
Werte" und "Neue Werte" in die Protokolltabelle, aber leider mit jeweils
identischen Informationen. Wo ist mein Denkfehler? Die Eintràge, die
festgehalten sind, sind die Änderungsdaten.

Danke für Eure Infos.

Susanne
 

Lesen sie die antworten

#1 Christa Kurschat
20/05/2010 - 17:12 | Warnen spam
Hallo Susanne,

"Susanne Senger" schrieb im Newsbeitrag
news:%23R$RDwC%
Hallo, NG,

ich habe ein Problem mit einem Trigger:, und zwar soll dieser Trigger eine
Tabelle in Bezug auf Änderungen überwachen und diese Änderungen in eine
separate Tabelle schreiben.

mein Code:
create trigger [dbo].[tr_Tabelle_Modify] on [dbo].[Tabelle]
For
delete, update
as

Begin
Set NOCOUNT ON
Insert into tblProtokoll
(Spaltennamen)
Select 'Neue Werte' as Typ, (restliche Spaltennamen)
from Tabelle
Where ID select ID from inserted

Set NOCOUNT ON
Insert into tblProtokoll
(Spaltennamen)
Select Alte Werte' as Typ, (restliche Spaltennamen)
from Tabelle
Where ID select ID from deleted

Set NOCOUNT OFF

im Prinzip funktioniert der Trigger, nur ist meine Idee natürlich, dass
ich unter dem Eintrag Alte Werte die Daten finde, die vor der Änderung in
der Tabelle standen, wàhrend ich bei Neue Werte erwarten würde, dass die
neuen, also abgeànderten Daten erscheinen. Tatsàchlich aber bekomme ich
"Alte Werte" und "Neue Werte" in die Protokolltabelle, aber leider mit
jeweils identischen Informationen. Wo ist mein Denkfehler? Die Eintràge,
die festgehalten sind, sind die Änderungsdaten.



Dein Denkfehler liegt hier:
Select Alte Werte' as Typ, (restliche Spaltennamen)
from Tabelle
Where ID select ID from deleted

Du mußt auch die Werte aus deleted holen.

Besser wàre:
Select Alte Werte' as Typ, (restliche Spaltennamen)
from deleted

Eine where-Bedingung brauchst Du meiner Meinung nach nicht, der Trigger
feuert einmal pro Tabelle, in deleted stehen die Werte für alle Änderungen.
Das gleiche gilt dann auch für die neuen Werte. Die solltest Du aus inserted
holen.

Hast Du SQL2008, dann könntest Du mit direkt OUTPUT arbeiten.

Gruß
Christa

Ähnliche fragen