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 zum Erzwingen von Geschäftsregeln und Datenintegrität, Abfragen anderer Tabellen und Einschließen komplexer Transact-SQL-Anweisungen verwendet werden. 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
Nach:
Einschränkungsverarbeitung
Deklarativen referenziellen Aktionen
Erstellung der inserted- und deleted-Tabellen
Der auslösenden Aktion
Vor:
Einschränkungsverarbeitung
Anstelle:
Der auslösenden Aktion
Nach:
Erstellung der inserted- und deleted-Tabellen
Ausführungsreihenfolge
Der zuerst und zuletzt auszuführende Trigger kann angegeben werden.
Nicht verfügbar
Verweise auf varchar(max)-, nvarchar(max)- und varbinary(max)-Spalten in inserted- und deleted-Tabellen
Zulässig
Zulässig
Verweise auf text-, ntext- und image-Spalten in inserted- und deleted-Tabellen
Nicht zulässig
Zulässig
CLR-Trigger
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 wurden und Elemente einer Assembly sind, die in .NET Framework erstellt und in SQL Server hochgeladen werden.
Verwandte Aufgaben
Aufgabe |
Thema |
---|---|
Beschreibt, wie ein DML-Trigger erstellt wird. |
|
Beschreibt, wie ein CLR-Trigger erstellt wird. |
|
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. |
|
Beschreibt, wie die Reihenfolge der Auslösung von AFTER-Triggern angegeben wird. |
|
Beschreibt, wie die speziellen INSERT- und DELETE-Tabellen im Triggercode verwendet werden. |
|
Beschreibt, wie ein DML-Trigger geändert oder umbenannt wird. |
|
Beschreibt, wie Informationen zu DML-Triggern angezeigt werden. |
|
Beschreibt, wie DML-Trigger gelöscht oder deaktiviert werden. |
|
Beschreibt, wie Triggersicherheit verwaltet wird. |
Siehe auch
Verweis
DISABLE TRIGGER (Transact-SQL)