mk-prg-net \ ms-sql \ tsql \ddl \create-trigger

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