Grundlegendes zu DDL-Triggern
Wie normale Trigger lösen auch DDL-Trigger gespeicherte Prozeduren als Antwort auf Ereignisse aus. Im Unterschied zu DML-Triggern werden sie jedoch nicht als Antwort auf UPDATE-, INSERT- oder DELETE-Anweisungen in Tabellen oder Sichten ausgelöst. Stattdessen werden sie als Antwort auf verschiedene DDL-Ereignisse (Data Definition Language, Datendefinitionssprache) ausgelöst. Diese Ereignisse entsprechen in erster Linie Transact-SQL-Anweisungen, die mit den Schlüsselwörtern CREATE, ALTER und DROP beginnen. Bestimmte gespeicherte Systemprozeduren, die DDL-ähnliche Vorgänge ausführen, können ebenfalls DDL-Trigger auslösen.
Wichtig |
---|
Testen Sie Ihre DDL-Trigger, um ihre Reaktion auf ausgeführte gespeicherte Systemprozeduren zu bestimmen. Die CREATE TYPE-Anweisung und die gespeicherte Prozedur sp_addtype lösen z. B. beide einen DDL-Trigger aus, der für ein CREATE_TYPE-Ereignis erstellt wird. |
DDL-Trigger können für Verwaltungsaufgaben verwendet werden, z. B. zum Überwachen und Steuern von Datenbankvorgängen.
Sie können DDL-Trigger für die folgenden Aufgaben verwenden:
Sie möchten bestimmte Änderungen am Datenbankschema verhindern.
Sie möchten, dass als Antwort auf eine Änderung im Datenbankschema ein Ereignis auftritt.
Sie möchten Änderungen oder Ereignisse am bzw. im Datenbankschema aufzeichnen.
DDL-Trigger werden nur ausgelöst, nachdem die DDL-Anweisungen ausgeführt werden, die diese Trigger auslösen. DDL-Trigger können nicht als INSTEAD OF-Trigger verwendet werden.
Das folgende Beispiel zeigt, wie mithilfe eines DDL-Triggers verhindert werden kann, dass Tabellen in einer Datenbank geändert oder gelöscht werden.
CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT 'You must disable Trigger "safety" to drop or alter tables!'
ROLLBACK ;
DDL-Trigger können als Antwort auf ein Transact-SQL-Ereignis ausgelöst werden, das in der aktuellen Datenbank oder auf dem aktuellen Server verarbeitet wird. Der Bereich des Triggers hängt von dem Ereignis ab. Weitere Informationen zum Bereich eines DDL-Triggers finden Sie unter Entwerfen von DDL-Triggern.
Zum Abrufen eines Beispiels für DDL-Trigger aus der AdventureWorks-Beispieldatenbank öffnen Sie im Objekt-Explorer von SQL Server Management Studio den Ordner Database Triggers, der sich im Ordner Programmability der AdventureWorks-Datenbank befindet. Klicken Sie mit der rechten Maustaste auf ddlDatabaseTriggerLog, und wählen Sie Skript für Datenbanktrigger als aus. Standardmäßig ist der DDL-Trigger ddlDatabaseTriggerLog deaktiviert.