Grundlegendes zu DDL-Triggern und DML-Triggern im Vergleich

DDL-Trigger und DML-Trigger werden für verschiedene Zwecke verwendet.

DML-Trigger werden für INSERT-, UPDATE- und DELETE-Anweisungen ausgeführt, unterstützen das Erzwingen von Geschäftsregeln und erweitern die Datenintegrität, wenn Daten in Tabellen oder Sichten geändert werden.

DDL-Trigger werden für CREATE-, ALTER-, DROP- und andere DDL-Anweisungen sowie für gespeicherte Prozeduren ausgeführt, die DDL-ähnliche Vorgänge ausführen.Sie werden zum Ausführen von administrativen Tasks sowie zum Erzwingen von Geschäftsregeln verwendet, die sich auf Datenbanken auswirken. Sie gelten für alle Befehle eines einzelnen Typs in der gesamten Datenbank oder auf einem gesamten Server.

DML-Trigger und DDL-Trigger werden mit einer ähnlichen Transact-SQL-Syntax erstellt, geändert und gelöscht und weisen weiteres gemeinsames Verhalten auf.

Ebenso wie DML-Trigger können auch DDL-Trigger verwalteten Code als Paket in einer Assembly ausführen, die in Microsoft .NET Framework erstellt und in SQL Server hochgeladen wurde. Weitere Informationen finden Sie unter Programmieren von CLR-Triggern.

Ebenso wie DML-Trigger können auch mehrere DDL-Trigger für die gleiche Transact-SQL-Anweisung erstellt werden. Ein DDL-Trigger und die ihn auslösende Anweisung werden außerdem innerhalb der gleichen Transaktion ausgeführt. Für die Transaktion kann ein Rollback aus dem Trigger durchgeführt werden. Schwerwiegende Fehler können bewirken, dass für eine ganze Transaktion ein automatisches Rollback durchgeführt wird. DDL-Trigger, die innerhalb eines Batches ausgeführt werden und explizit die ROLLBACK TRANSACTION-Anweisungen enthalten, brechen den gesamten Batch ab. Weitere Informationen finden Sie unter Verwenden von DDL-Triggern mit einer COMMIT- oder ROLLBACK TRANSACTION-Anweisung.

HinweisHinweis

Ein Rollback kann nicht für ein ALTER DATABASE-Ereignis ausgeführt werden, das im Text eines DDL-Triggers auftritt.

Ebenso wie DML-Trigger können auch DDL-Trigger geschachtelt werden. Weitere Informationen finden Sie unter Verwenden von geschachtelten Triggern.

Wenn Sie DDL-Trigger entwerfen, sollten Sie die folgenden Unterschiede zu DML-Triggern berücksichtigen:

  • DDL-Trigger werden erst ausgeführt, nachdem eine Transact-SQL-Anweisung abgeschlossen wurde. DDL-Trigger können nicht als INSTEAD OF-Trigger verwendet werden.

  • DDL-Trigger erstellen keine inserted- bzw. deleted-Tabellen. Die Informationen zu einem Ereignis, das einen DDL-Trigger auslöst, sowie zu den nachfolgenden Änderungen, die der Trigger verursacht, werden mit der EVENTDATA-Funktion aufgezeichnet. Weitere Informationen finden Sie unter Verwenden der EVENTDATA-Funktion.

Siehe auch

Konzepte