Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Verwandte Aufgaben
| 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)