Freigeben über


DML-Trigger

Bei DML-Triggern handelt es sich um einen bestimmten Typ einer gespeicherten Prozedur, die automatisch wirksam wird, sobald ein DML-Ereignis (Data Manipulation Language, Datenbearbeitungssprache) ausgeführt wird, das sich auf die im Trigger definierte Tabelle oder Sicht auswirkt. DML-Ereignisse schließen die Anweisungen INSERT, UPDATE oder DELETE ein. DML-Trigger können verwendet werden, um Geschäftsregeln und Datenintegrität zu erzwingen, andere Tabellen abzufragen und komplexe Transact-SQL-Anweisungen einzuschließen. Der Trigger und die auslösende Anweisung werden wie eine einzige Transaktion behandelt, für die aus dem Trigger heraus ein Rollback ausgeführt werden kann. Tritt ein schwerer Fehler auf (z B. bei unzureichendem Speicherplatz), wird für die gesamte Transaktion automatisch ein Rollback ausgeführt.

Vorteile von DML-Triggern

DML-Trigger ähneln Einschränkungen insofern, als sie die Entitätsintegrität oder Domänenintegrität erzwingen können. Im Allgemeinen sollte die Entitätsintegrität immer auf der untersten Ebene durch Indizes erzwungen werden, die Teil von PRIMARY KEY- und UNIQUE-Einschränkungen sind oder unabhängig von Einschränkungen erstellt wurden. Die Domänenintegrität sollte durch CHECK-Einschränkungen und referenzielle Integrität (RI) sollte durch FOREIGN KEY-Einschränkungen erzwungen werden. DML-Trigger sind dann am sinnvollsten, wenn die von Einschränkungen unterstützten Funktionen nicht die Funktionalitätsanforderungen der Anwendung erfüllen.

Die folgende Liste vergleicht DML-Trigger mit Einschränkungen und gibt an, wenn DML-Trigger Vorteile aufweisen.

  • DML-Trigger können Änderungen über verknüpfte Tabellen in der Datenbank kaskadierend weitergeben. Diese Änderungen können jedoch mithilfe von kaskadierenden Einschränkungen der referenziellen Integrität effizienter ausgeführt werden. FOREIGN KEY-Einschränkungen können einen Spaltenwert nur anhand eines exakt übereinstimmenden Wertes in einer anderen Spalte überprüfen, außer die REFERENCES-Klausel definiert eine überlappende referenzielle Aktion.

  • Sie können vor böswilligen oder falschen INSERT-, UPDATE- und DELETE-Operationen schützen und andere Einschränkungen erzwingen, die komplexer als die mit CHECK-Einschränkungen definierten sind.

    Im Gegensatz zu CHECK-Einschränkungen können DML-Trigger auf Spalten in anderen Tabellen verweisen. So kann ein Trigger beispielsweise eine SELECT-Anweisung aus einer anderen Tabelle verwenden, um die eingefügten oder aktualisierten Daten zu vergleichen und weitere Aktionen auszuführen, wie z. B. Ändern der Daten oder Anzeigen einer benutzerdefinierten Fehlermeldung.

  • Sie können den Status einer Tabelle vor und nach einer Datenänderung auswerten und, basierend auf den festgestellten Unterschieden, bestimmte Aktionen ausführen.

  • Mehrere DML-Trigger desselben Typs (INSERT, UPDATE oder DELETE) für eine Tabelle ermöglichen es, dass als Reaktion auf dieselbe Änderungsanweisung unterschiedliche Aktionen durchgeführt werden.

  • Einschränkungen können Fehlerinformationen nur mithilfe von standardisierten Systemfehlermeldungen weitergeben. Wenn die Anwendung benutzerdefinierte Meldungen erfordert und eine komplexere Fehlerbehandlung benötigt oder diese von Vorteil wären, müssen Sie einen Trigger verwenden.

  • DML-Trigger können Änderungen nicht zulassen oder einen Rollback für Änderungen ausführen, die die referenzielle Integrität verletzen, und auf diese Weise den Versuch der Datenänderung abbrechen. Ein entsprechender Trigger kann wirksam werden, wenn Sie einen Fremdschlüssel ändern und der neue Wert nicht mit dem Primärschlüssel übereinstimmt. Zu diesem Zweck werden jedoch normalerweise FOREIGN KEY-Einschränkungen verwendet.

  • Wenn für die Triggertabelle Einschränkungen vorhanden sind, werden sie nach der Ausführung des INSTEAD OF-Triggers, jedoch vor der Ausführung des AFTER-Triggers überprüft. Falls eine Verletzung der Einschränkungen vorliegt, wird für die Aktionen des INSTEAD OF-Triggers ein Rollback ausgeführt. Der AFTER-Trigger wird nicht ausgeführt.

DML-Triggertypen

AFTER-Trigger
AFTER-Trigger werden nach der INSERT-, UPDATE-, MERGE- oder DELETE-Anweisung ausgeführt. AFTER-Trigger werden niemals ausgeführt, wenn eine Einschränkungsverletzung auftritt; diese Trigger können somit nicht für Verarbeitungen verwendet werden, die Einschränkungsverletzungen verhindern. Bei jeder in der MERGE-Anweisung angegebenen INSERT-, UPDATE- oder ENTF-Aktion, wird für jeden DML-Vorgang der entsprechende Trigger ausgelöst.

INSTEAD OF-Trigger
INSTEAD OF-Trigger überschreiben die Standardaktionen der auslösenden Anweisung. Sie können daher zum Ausführen einer Fehler- oder Wertüberprüfung für eine oder mehrere Spalten sowie zum Ausführen zusätzlicher Aktionen vor dem Einfügen, Aktualisieren oder Löschen der Zeile bzw. Zeilen verwendet werden. Nehmen Sie z. B. an, der aktualisierte Wert in einer Spalte für Stundenlöhne in einer Gehaltstabelle überschreitet einen bestimmten Wert. Für diesen Fall kann ein Trigger definiert werden, der entweder eine Fehlermeldung erstellt und ein Rollback für die Transaktion ausführt oder einen neuen Datensatz in einen Überwachungspfad einfügt, bevor der Datensatz in die Gehaltstabelle eingefügt wird. Der wichtigste Vorteil von INSTEAD OF-Triggern ist, dass sie das Aktualisieren von Sichten ermöglichen, die normalerweise nicht aktualisiert werden könnten. Eine Sicht, die sich aus mehreren Basistabellen zusammensetzt, muss beispielsweise einen INSTEAD OF-Trigger verwenden, um INSERT-, UPDATE- und DELETE-Vorgänge zu unterstützen, die auf Daten in mehreren Tabellen verweisen. Ein weiterer Vorteil von INSTEAD OF-Triggern ist die Möglichkeit, Logik zu codieren, die Teile eines Batches zurückweist, während andere Teile zugelassen werden.

In der folgenden Tabelle werden die Funktionen von AFTER- und INSTEAD OF-Triggern verglichen.

Funktion AFTER-Trigger INSTEAD OF-Trigger
Anwendbarkeit Tabellen Tabellen und Sichten
Anzahl pro Tabelle oder Sicht Mehrere Trigger pro auslösende Aktion (INSERT, UPDATE oder DELETE) Ein Trigger pro auslösende Aktion (INSERT, UPDATE oder DELETE)
Kaskadierende Verweise Keine Einschränkungen INSTEAD OF UPDATE- und DELETE-Trigger sind nicht für Tabellen zulässig, die Ziel von kaskadierenden Einschränkungen für die referenzielle Integrität sind.
Ausführung Nachher:

Einschränkungsverarbeitung
Deklarativen referenziellen Aktionen
Erstellung derinserted - und deleted -Tabellen
Der auslösenden Aktion
Vorher: Einschränkungsverarbeitung

Anstelle von: Die auslösende Aktion

Nach: Erstellung von eingefügten und gelöschten Tabellen
Reihenfolge der Ausführung Der zuerst und zuletzt auszuführende Trigger kann angegeben werden. Nicht verfügbar
varchar(max)- , nvarchar(max)- und varbinary(max) -Spaltenverweise in eingefügten und gelöschten Tabellen Zulässig Zulässig
text- , ntext- und image -Spaltenverweise in eingefügten und gelöschten Tabellen Nicht zulässig Zulässig

CLR-Auslöser
Ein CLR-Trigger kann ein AFTER- oder ein INSTEAD OF-Trigger sein. Bei einem CLR-Trigger kann es sich auch um einen DDL-Trigger handeln. Anstatt eine gespeicherte Transact-SQL-Prozedur auszuführen, führt ein CLR-Trigger eine oder mehrere Methoden aus, die in verwaltetem Code geschrieben sind und Member einer Assembly sind, die im .NET Framework erstellt und in SQL Server hochgeladen wird.

Aufgabe Thema
Beschreibt, wie ein DML-Trigger erstellt wird. Erstellen von DML-Triggern
Beschreibt, wie ein CLR-Trigger erstellt wird. Erstellen von CLR-Triggern
Beschreibt, wie ein DML-Trigger zum Verarbeiten von einzeiligen und mehrzeiligen Datenänderungen erstellt wird. Erstellen von DML-Triggern für die Verarbeitung mehrerer Datenzeilen
Beschreibt, wie Trigger geschachtelt werden. Erstellen von geschachtelten Triggern
Beschreibt, wie die Reihenfolge der Auslösung von AFTER-Triggern angegeben wird. Angeben des ersten und des letzten Triggers
Beschreibt, wie die speziellen INSERT- und DELETE-Tabellen im Triggercode verwendet werden. Verwenden der Tabellen inserted und deleted
Beschreibt, wie ein DML-Trigger geändert oder umbenannt wird. Ändern oder Umbenennen von DML-Triggern
Beschreibt, wie Informationen zu DML-Triggern angezeigt werden. Abrufen von Informationen zu DML-Triggern
Beschreibt, wie DML-Trigger gelöscht oder deaktiviert werden. Löschen oder Deaktivieren von DML-Triggern
Beschreibt, wie Triggersicherheit verwaltet wird. Verwalten der Triggersicherheit

Weitere Informationen

CREATE TRIGGER (Transact-SQL)
ALTER TRIGGER (Transact-SQL)
DROP TRIGGER (Transact-SQL)
DISABLE TRIGGER (Transact-SQL)
Triggerfunktionen (Transact-SQL)