DML-Trigger
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
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, wann DML-Trigger Vorteile gegenüber Einschränkungen 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: Der auslösenden Aktion Nach: Erstellung der inserted - und deleted -Tabellen |
Reihenfolge der Ausführung | Der zuerst und zuletzt auszuführende Trigger kann angegeben werden. | Nicht zutreffend |
varchar(max)-, nvarchar(max)-, und varbinary(max) -Spaltenverweise in eingefügten und gelöschten Tabellen | Zulässig | Zulässig |
Verweise auftext, ntext- und image -Spalten in inserted - und deleted -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 wurden und Elemente einer Assembly sind, die in .NET Framework erstellt und in SQL Server hochgeladen werden.
Related Tasks
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)