Trigger
Trigger sind spezielle gespeicherte Prozeduren, die gestartet werden, wenn Datenzeilen einer Tabelle mittels DELETE, INSERT oder UPDATE geändert werden.
create trigger triggername on tabellenname | sichtname [for [after] | instead of] {delete | insert | update} [with encryption] as t-sql anweisungen
Zeitpunkt der Ausführung
Mehrere Trigger auf einer Tabelle/Sicht
Wurden mehrere After Trigger definiert, dann werden sie in einer durch den Zufall bestimmten Reihenfolge ausgeführt. Mittels der gespeicherten Prozedur sp_settriggerorder kann davon abweichend ein After- Tirgger als erster bzw. als letzter auszuführender definiert werden.
Pro insert, update und delete - Anweisung kann ein Instead- Of- Trigger definiert werden. Damit wird pro Aktualisierung immer nur genau ein Instead- Of Trigger aufgerufen.
Spezielle, in Triggern verfügbare Tabellen
In Triggern kann auf die beiden Spezialtabellen deleted und inserted zugegriffen werden. Ihre Struktur entspricht 1:1 der Struktur der Tabelle oder Sicht, für die sie implementiert wurden.
Wird eine Zeile mittels DELETE gelöscht, dann enthält deleted die Kopie der gelöschten Zeile.
Werden neue Zeilen einer Tabelle hinzugefügt, dann stehen diese als Kopie in der Tabelle inserted.
Wird eine Zeile durch Update geändert, dann steht die ursprüngliche Zeile vor der Änderung in der Tabelle deleted und die neue geänderte Zeile in der Tabelle inserted.
Beispiel
create trigger melde_aenderungen on personal for delete, insert as if exist(select * from inserted) print 'Sie haben etwas eingefügt' if exist(select * from deleted) print 'Sie haben was gelöscht' go
Regeln beim Implementieren von Triggern
|
|
---|---|
Einsatz |
Trigger werden implementiert zur Durchsetzung der referentiellen- und Datenintegrität sowie der Kapselung von Geschäftsregeln. |
temporäre Tabellen |
Für temporäre Tabellen können keine Trigger erstellt werden |
Resultsets |
Trigger dürfen keine Resultsets zurückliefern. Select- Anwiesungen in Triggern sollten in if exists(...) gekapselt werden. |
Verschlüsselung/Sicherheit |
Mit der Option with encryption kann die definition der Trigger in der Tabelle syscomments verschlüsselt werden. |
verbotene Anweisungen |
Folgende Anweisungen dürfen in Triggerimplementierungen nicht auftreten: alter table, alter database, truncate table, grant, revoke, reconfigure, load database, load transaction, update statistics, select into, alle disk -Anweisungen |
rollback |
Rollbacks von Transaktionen in Triggern können zu unerwarteten Ergebnissen führen |
Aufg.
Implementieren Sie einen Trigger, der beim Einfügen in die Tabelle Users DMS einen Eintrag in der Tabelle UpdateLog durchführt