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.

Wichtiger HinweisWichtig

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 AdventureWorks2008R2-Beispieldatenbank öffnen Sie im Objekt-Explorer von SQL Server Management Studio den Ordner Database Triggers, der sich im Ordner Programmability der AdventureWorks2008R2-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.