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.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-Datenbank in Microsoft Fabric
Der DML-Trigger ist ein spezieller Typ gespeicherter Prozedur, 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, UPDATEoder DELETE Anweisungen. DML-Trigger können verwendet werden, um Geschäftsregeln und Datenintegrität durchzusetzen, andere Tabellen abzufragen und komplexe Transact-SQL-Anweisungen einzubinden. 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
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 werden. Die Domänenintegrität sollte durch CHECK Einschränkungen erzwungen werden, und die referenzielle Integrität (RI) sollte durch FOREIGN KEY Einschränkungen erzwungen werden. DML-Trigger sind am nützlichsten, wenn die von Einschränkungen unterstützten Features nicht den funktionalen Anforderungen der Anwendung entsprechen können.
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 KEYEinschränkungen können einen Spaltenwert nur mit einer exakten Übereinstimmung mit einem Wert in einer anderen Spalte überprüfen, es sei denn, dieREFERENCESKlausel definiert eine kaskadierende referenzielle Aktion.Sie können vor böswilligen oder falschen
INSERT,UPDATEundDELETEVorgängen schützen und andere Einschränkungen erzwingen, die komplexer sind als Einschränkungen, die mitCHECKEinschränkungen definiert sind.Im Gegensatz zu
CHECKEinschränkungen können DML-Trigger auf Spalten in anderen Tabellen verweisen. Ein Auslöser kann zum Beispiel einSELECTaus einer anderen Tabelle verwenden, um die eingefügten oder aktualisierten Daten zu vergleichen und um weitere Aktionen durchzuführen, wie beispielsweise Daten zu ändern oder eine benutzerdefinierte Fehlermeldung anzuzeigen.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,UPDATEoderDELETE) in einer Tabelle ermöglichen mehrere, verschiedene Aktionen, die als Reaktion auf dieselbe Änderungsanweisung ausgefü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, 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.
FOREIGN KEYEinschränkungen werden jedoch in der Regel für diesen Zweck verwendet.Wenn Einschränkungen in der Triggertabelle vorhanden sind, werden sie nach der
INSTEAD OFTriggerausführung, aber vor derAFTERTriggerausführung überprüft. Wenn die Einschränkungen verletzt werden, werden dieINSTEAD OFTriggeraktionen zurückgesetzt, und derAFTERTrigger wird nicht ausgeführt.
Typen von DML-Triggern
AFTER-Trigger
AFTER Trigger werden ausgeführt, nachdem die Aktion der INSERT, UPDATE, , MERGEoder DELETE Anweisung ausgeführt wird.
AFTER Trigger werden niemals ausgeführt, wenn eine Einschränkungsverletzung auftritt. Daher können diese Trigger nicht für eine Verarbeitung verwendet werden, die Einschränkungsverletzungen verhindern kann. Für jede in einer INSERT Anweisung angegebene UPDATE, DELETE oder MERGE Aktion wird der entsprechende Trigger für jeden DML-Vorgang ausgelöst.
INSTEAD OF-Trigger
INSTEAD OF Trigger überschreiben die Standardaktionen der auslösenden Anweisung. Daher können sie verwendet werden, um Eine Fehler- oder Wertüberprüfung für eine oder mehrere Spalten durchzuführen und andere Aktionen vor dem Einfügen, Aktualisieren oder Löschen der Zeile oder Zeilen auszuführen. 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 Hauptvorteil von INSTEAD OF 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 besteht darin, dass sie Ihnen die Codelogik ermöglichen, die Teile eines Batches ablehnen kann, während andere Teile eines Batches erfolgreich ausgeführt werden können.
Diese Tabelle vergleicht die Funktionalität der AFTER- und INSTEAD OF-Auslöser.
| Funktion |
AFTER Trigger |
INSTEAD OF Trigger |
|---|---|---|
| Anwendbarkeit | Tabellen | Tabellen und Sichten |
| Anzahl pro Tabelle oder Sicht | Mehrere pro auslösende Aktion (UPDATE, DELETEund INSERT) |
Eine pro auslösender Aktion (UPDATE, DELETEund INSERT) |
| Kaskadierende Verweise | Keine Einschränkungen |
INSTEAD OF UPDATE und DELETE Trigger sind für Tabellen, die Ziele für kaskadierte referentielle Integritätseinschränkungen sind, nicht zulässig. |
| Ausführung | Danach: Einschränkungsverarbeitung Deklarativen referenziellen Aktionen inserted und deleted TabellenerstellungDer auslösenden Aktion |
Vorher: Einschränkungsverarbeitung Anstelle von: Die auslösende Aktion Nach der Erstellung der Tabellen inserted und deleted |
| Reihenfolge der Ausführung | Die erste und letzte Ausführung kann angegeben werden. | Nicht zutreffend |
varchar(max)-, nvarchar(max)- und varbinary(max)- Spaltenbezüge in inserted und deleted Tabellen |
Zulässig | Zulässig |
Text, ntext und Bildspaltenverweise in inserted und deleted Tabellen |
Nicht zulässig | Zulässig |
CLR-Trigger
Ein CLR-Trigger (Common Language Runtime) kann entweder ein AFTER-Trigger oder ein INSTEAD OF-Trigger sein. Ein CLR-Trigger kann auch ein DDL-Trigger (Data Definition Language) sein. Anstatt eine Transact-SQL gespeicherte Prozedur auszuführen, führt ein CLR Trigger eine oder mehrere in verwaltetem Code geschriebene Methoden aus, die Member einer im .NET Framework erstellten und in SQL Server hochgeladenen Assembly sind.
Verwandte Aufgaben
| Aufgabe | Artikel |
|---|---|
| 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 angegeben wird, in der AFTER Trigger ausgelöst werden. |
Angeben des ersten und des letzten Triggers |
| Beschreibt, wie die speziellen INSERT- und DELETE-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 Triggersicherheit verwaltet wird. | Verwalten der Triggersicherheit |