Hallo!
Mir ist aufgefallen, dass Trigger im MS SQL Server auch dann aktiviert werden, wenn es gar keine tatsächliche Datenänderung gibt.
Also nimmt man z.B. diesen Befehl:
UPDATE Tabelle
SET Spalte1 = 'abc'
WHERE (0 = 1)
Dieser ändert nichts, feuert aber trotzdem den UPDATE-Trigger an der Tabelle. Dieser Trigger macht eventuell weitere updates, die abhängig sind von Inserted und Deleted, da diese leer sind, wird aber wieder nichts geändert, trotzdem werden die Trigger an den abhängigen Tabellen aktiviert und so triggert es sich durch die ganze Datenbank, obwohl gar nichts verändert wurde.
Bevor ich jetzt anfange und bei jedem der 200 Trigger, die wir haben, am Anfang zu überprüfen, ob INSERTED und DELETED mindestens einen Eintrag enhalten, wollte ich mal fragen, ob es dafür eventuell eine globale Einstellung im MS SQL Server gibt. Also praktisch sowas wie "Trigger werden nur ausgelöst, wenn sich Daten ändern".
Danke.
Mir ist aufgefallen, dass Trigger im MS SQL Server auch dann aktiviert werden, wenn es gar keine tatsächliche Datenänderung gibt.
Also nimmt man z.B. diesen Befehl:
UPDATE Tabelle
SET Spalte1 = 'abc'
WHERE (0 = 1)
Dieser ändert nichts, feuert aber trotzdem den UPDATE-Trigger an der Tabelle. Dieser Trigger macht eventuell weitere updates, die abhängig sind von Inserted und Deleted, da diese leer sind, wird aber wieder nichts geändert, trotzdem werden die Trigger an den abhängigen Tabellen aktiviert und so triggert es sich durch die ganze Datenbank, obwohl gar nichts verändert wurde.
Bevor ich jetzt anfange und bei jedem der 200 Trigger, die wir haben, am Anfang zu überprüfen, ob INSERTED und DELETED mindestens einen Eintrag enhalten, wollte ich mal fragen, ob es dafür eventuell eine globale Einstellung im MS SQL Server gibt. Also praktisch sowas wie "Trigger werden nur ausgelöst, wenn sich Daten ändern".
Danke.
Comment