Freigeben über


DML-Trigger

DML-Trigger sind ein spezieller Typ gespeicherter Prozeduren, der automatisch wirksam wird, wenn ein DML-Ereignis (Data Manipulation Language) stattfindet, das sich auf die im Trigger definierte Tabelle oder Ansicht auswirkt. DML-Ereignisse umfassen INSERT-, UPDATE- oder DELETE-Anweisungen. 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 Anweisung, die ihn auslöst, werden als eine einzige Transaktion behandelt, die innerhalb des Triggers zurückgesetzt werden kann. Wenn ein schwerwiegender Fehler erkannt wird (z. B. unzureichender Speicherplatz), wird die gesamte Transaktion automatisch zurückgesetzt.

DML Trigger-Vorteile

DML-Trigger ähneln Einschränkungen, bei denen sie entitätsintegrität oder Domänenintegrität erzwingen können. Im Allgemeinen sollte die Entitätsintegrität immer auf der niedrigsten Ebene durch Indizes erzwungen werden, die Teil von PRIMARY KEY- und UNIQUE-Einschränkungen sind oder unabhängig von Einschränkungen erstellt werden. Die Domänenintegrität sollte durch CHECK-Einschränkungen erzwungen werden, und die referenzielle Integrität (RI) sollte durch Fremdschlüssel-Einschränkungen sichergestellt werden. DML-Trigger sind am nützlichsten, wenn die von Einschränkungen unterstützten Features die funktionalen Anforderungen der Anwendung nicht erfüllen können.

In der folgenden Liste werden DML-Trigger mit Einschränkungen verglichen und aufgezeigt, wann DML-Trigger gegenüber Einschränkungen Vorteile haben.

  • DML-Trigger können Änderungen über verwandte Tabellen in der Datenbank kaskadieren; diese Änderungen können jedoch effizienter mithilfe von referenziellen Integritätsbeschränkungen ausgeführt werden. FOREIGN KEY-Einschränkungen können einen Spaltenwert nur mit einer exakten Übereinstimmung mit einem Wert in einer anderen Spalte überprüfen, es sei denn, die REFERENCES-Klausel definiert eine kaskadierende referenzielle Aktion.

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

    Im Gegensatz zu CHECK-Einschränkungen können DML-Trigger auf Spalten in anderen Tabellen verweisen. Ein Trigger kann z. B. eine SELECT aus einer anderen Tabelle verwenden, um mit den eingefügten oder aktualisierten Daten zu vergleichen und zusätzliche Aktionen auszuführen, z. B. ändern oder eine benutzerdefinierte Fehlermeldung anzeigen.

  • Sie können den Status einer Tabelle vor und nach einer Datenänderung auswerten und Basierend auf diesem Unterschied Aktionen ergreifen.

  • Mehrere DML-Trigger desselben Typs (INSERT, UPDATE oder DELETE) in einer Tabelle ermöglichen mehrere, verschiedene Aktionen, die als Reaktion auf dieselbe Änderungsanweisung ausgeführt werden.

  • Einschränkungen können nur über standardisierte Systemfehlermeldungen über Fehler kommunizieren. Wenn Ihre Anwendung angepasste Nachrichten und komplexere Fehlerbehandlung erfordert oder von dieser profitieren kann, müssen Sie einen Trigger verwenden.

  • DML-Trigger können Änderungen, die die referenzielle Integrität verletzen, nicht zulassen oder zurücksetzen, wodurch die versuchte Datenänderung abgebrochen wird. Ein solcher Trigger kann wirksam werden, wenn Sie einen Fremdschlüssel ändern und der neue Wert nicht mit seinem Primärschlüssel übereinstimmt. Fremdschlüsseleinschränkungen werden jedoch in der Regel für diesen Zweck verwendet.

  • Wenn Einschränkungen auf der Triggertabelle vorhanden sind, werden sie nach der INSTEAD OF-Trigger-Ausführung, aber vor der AFTER-Trigger-Ausführung überprüft. Wenn die Einschränkungen verletzt werden, wird ein Rollback der INSTEAD OF Triggeraktionen ausgeführt, und der AFTER-Trigger wird nicht ausgeführt.

Typen von DML-Triggern

AFTER-Trigger
AFTER-Trigger werden ausgeführt, nachdem die Aktion der INSERT-, UPDATE-, MERGE- oder DELETE-Anweisung ausgeführt wurde. AFTER-Trigger werden niemals ausgeführt, wenn eine Einschränkungsverletzung auftritt; Daher können diese Trigger nicht für jede Verarbeitung verwendet werden, die Einschränkungsverletzungen verhindern kann. Für jede in einer MERGE-Anweisung angegebene INSERT-, UPDATE- oder DELETE-Aktion wird der entsprechende Trigger für jeden DML-Vorgang ausgelöst.

ANSTELLE VON Trigger
ANSTELLE VON Triggern überschreiben die Standardaktionen der auslösenden Anweisung. Daher können sie verwendet werden, um Fehler- oder Wertüberprüfungen für eine oder mehrere Spalten durchzuführen und die zusätzlichen Aktionen vor dem Einfügen, Aktualisieren oder Löschen der Zeile oder Zeilen auszuführen. Wenn beispielsweise der Wert, der in einer Lohntabelle in einer Lohnabrechnungsspalte aktualisiert wird, einen angegebenen Wert überschreitet, kann ein Auslöser definiert werden, um entweder eine Fehlermeldung zu erzeugen und die Transaktion zurückzugeben, oder einen neuen Datensatz in einen Überwachungspfad einfügen, bevor der Datensatz in die Lohnbuchhaltungstabelle eingefügt wird. Der Hauptvorteil von ANSTELLE VON Triggern besteht darin, dass sie Ansichten aktivieren, die nicht aktualisierbar sind, um Updates zu unterstützen. Beispielsweise muss eine Ansicht, die auf mehreren Basistabellen basiert, einen INSTEAD OF-Trigger verwenden, um Einfügungen, Aktualisierungen und Löschungen dieser Referenzdaten in mehreren Tabellen zu unterstützen. Ein weiterer Vorteil von INSTEAD OF-Triggern ist, dass sie Ihnen ermöglichen, Logik zu programmieren, die Teile eines Batches ablehnen kann, während andere Teile erfolgreich ausgeführt werden.

In dieser Tabelle werden die Funktionen der AFTER- und INSTEAD OF-Trigger verglichen.

Funktion AFTER-Trigger ANSTELLE DES Triggers
Anwendbarkeit Tabellen Tabellen und Sichten
Menge pro Tabelle oder Ansicht Mehrere pro auslösender Aktion (UPDATE, DELETE und INSERT) Eine pro auslösender Aktion (Update, Delete und Insert)
Kaskadierende Verweise Es gelten keine Einschränkungen. INSTEAD-OF UPDATE- und DELETE-Trigger sind für Tabellen, die Ziele von kaskadierten referenziellen Integritätsbeschränkungen sind, nicht zulässig.
Ausführung Danach:

Einschränkungsverarbeitung
Deklarative referenzielle Aktionen
Erstellen eingefügter und gelöschter Tabellen
Die auslösende Aktion
Vor: Einschränkungsverarbeitung

Anstelle von: Die auslösende Aktion

Nach der Erstellung von eingefügten und gelöschten Tabellen
Reihenfolge der Ausführung Die erste und letzte Ausführung kann angegeben werden. Nicht anwendbar
varchar(max), nvarchar(max)und varbinary(max) Spaltenverweise in eingefügten und gelöschten Tabellen Zulässig Zulässig
text, ntextund image Spaltenverweise in eingefügten und gelöschten Tabellen Nicht zulässig Zulässig

CLR-Trigger
Ein CLR-Trigger kann entweder ein AFTER- oder INSTEAD OF-Trigger sein. Ein CLR-Trigger kann auch ein DDL-Trigger sein. Anstatt eine Transact-SQL gespeicherte Prozedur auszuführen, führt ein CLR-Trigger eine oder mehrere Methoden aus, die in verwaltetem Code geschrieben wurden, die Member einer Assembly sind, die im .NET Framework erstellt und in SQL Server hochgeladen wurde.

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 erstellt wird, um sowohl Datenänderungen von Einzelzeilen als auch von mehreren Zeilen zu behandeln. Erstellen von DML-Triggern zum Verarbeiten mehrerer Datenzeilen
Beschreibt, wie man Trigger verschachtelt. Erstellen von geschachtelten Triggern
Beschreibt, wie die Reihenfolge angegeben wird, in der AFTER-Trigger ausgelöst werden. Angeben der ersten und letzten Auslöser
Beschreibt, wie die speziellen eingefügten und gelöschten Tabellen im Triggercode verwendet werden. Verwenden der eingefügten und gelöschten Tabellen
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 die Triggersicherheit verwaltet wird. Verwalten der Triggersicherheit

Siehe auch

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