Transact SQL – CREATE TRIGGER
Für die Erstellung eines DML Triggers wird die ALTER Berechtigung für die Tabelle oder Sicht vorausgesetzt.
Zum Erstellen eines DDL Triggers mit Serverbereich, ist die CONTROL SERVER Berechtigung erforderlich. Für DDL-Trigger mit Datenbankbereich, wird die ALTER ANY DATABASE DDL TRIGGER Berechtigung der Datenbank benötigt. In den Nachfolgenden Beispielen verwende ich die AdventureWorks Datenbank.
Beispiel für die Verwendung eines Triggers. Der Trigger wird bei Löschvorgängen in der DatabaseLog Tabelle ausgelöst. Die DatabaseLogID des gelöschten Eintrages wird per E-Mail an den Administrator gesendet.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | USE AdventureWorks GO CREATE TRIGGER SPION1 ON dbo.DatabaseLog AFTER DELETE AS DECLARE @LogID INT; SELECT @LogID =(SELECT DatabaseLogID FROM DELETED); EXEC msdb.dbo.sp_send_dbmail @recipients = 'administrator@tsql.de', @body = 'Ein Logeintrag wurde gelöscht.', @subject = @LogID; GO /* Erklärung --------- CREATE TRIGGER SPION1 ON dbo.DatabaseLog - Ein neuer Trigger "Spion1" wird an die Tabelle DatabaseLog angefügt AFTER DELETE - Der Trigger wird nach der DELETE Anweisung ausgeführt. - Wenn die Anweisung vor der Beendigung abbricht, wird der Trigger nicht ausgeführt. SELECT DatabaseLogID FROM DELETED - Dient zum Empfangen von Werten aus der DELETE-Anweisung. - Für UPDATE-Anweisungen nimmt man UPDATED und INSERTED für INSERT-Anweisungen */ |
Wenn jetzt ein Eintrag aus der Datenbank gelöscht wird, bekommt der Admin eine E-Mail Benachrichtigung.
1 2 | DELETE FROM [AdventureWorks].[dbo].[DatabaseLog] WHERE DatabaseLogID='25' |
Beispiel für einen Trigger der auf INSERT reagiert.
1 2 3 4 5 6 7 8 9 10 11 12 13 | USE AdventureWorks GO CREATE TRIGGER InsertTrigger ON dbo.DatabaseLog AFTER INSERT AS DECLARE @DatabaseUser VARCHAR(128); SELECT @DatabaseUser =(SELECT DatabaseUser FROM INSERTED); PRINT 'Der Benutzer ' + @DatabaseUser + ' hat einen Fehler produziert.'; GO |