Freigeben über


DML-Trigger

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-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 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öswilligen oder falschen INSERT, UPDATEund DELETE Vorgängen schützen und andere Einschränkungen erzwingen, die komplexer sind als Einschränkungen, die mit CHECK Einschränkungen definiert sind.

    Im Gegensatz zu CHECK Einschränkungen können DML-Trigger auf Spalten in anderen Tabellen verweisen. Ein Auslöser kann zum Beispiel ein SELECT aus 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, UPDATEoder DELETE) 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 KEY Einschränkungen werden jedoch in der Regel für diesen Zweck verwendet.

  • Wenn Einschränkungen in der Triggertabelle vorhanden sind, werden sie nach der INSTEAD OF Triggerausführung, aber vor der AFTER Triggerausführung überprüft. Wenn die Einschränkungen verletzt werden, werden die INSTEAD OF Triggeraktionen zurückgesetzt, 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, , 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 Tabellenerstellung

Der 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.

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