Heim > Datenbank > MySQL-Tutorial > Wie kann ich rekursive Trigger in SQL Server verhindern?

Wie kann ich rekursive Trigger in SQL Server verhindern?

DDD
Freigeben: 2024-12-31 14:19:14
Original
625 Leute haben es durchsucht

How Can I Prevent Recursive Triggers in SQL Server?

Verhindern rekursiver Trigger in SQL Server

In SQL Server 2008 verursacht ein Trigger für die tblMedia-Tabelle, [dbo].[tblMediaAfterInsertOrUpdate], versehentlich rekursives Verhalten. Dieses Verhalten tritt auf, wenn der Auslöser sowohl ausgelöst wird als auch sich anschließend selbst auslöst.

Um das Problem zu verstehen, untersuchen wir den Auslöser:

ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate]
ON [dbo].[tblMedia]
BEFORE INSERT, UPDATE
AS
BEGIN
    ...
Nach dem Login kopieren

Nach dem Einfügen oder Aktualisieren: Der Trigger wird ausgeführt, bevor Einfügungen oder Aktualisierungen festgeschrieben werden.

Potenzielle Rekursion: Die Update-Anweisung im Trigger versucht, die tblMedia-Tabelle zu ändern. Diese Änderung könnte möglicherweise denselben Trigger erneut auslösen und zu einer Endlosschleife führen.

Rekursion verhindern: Um dieses rekursive Verhalten zu verhindern, können wir die Funktion TRIGGER_NESTLEVEL() verwenden, um die Verschachtelungsebene zu überprüfen des Auslösers. Wenn die Verschachtelungsebene größer als 1 ist, wird der Trigger von einem anderen Trigger aufgerufen und sollte übersprungen werden.

ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate]
ON [dbo].[tblMedia]
BEFORE INSERT, UPDATE
AS
BEGIN
    IF TRIGGER_NESTLEVEL() <= 1 /* Prevent recursion */
    BEGIN
        ...
    END
END
Nach dem Login kopieren

Erklärung:

  • Der TRIGGER_NESTLEVEL ()-Funktion gibt die Anzahl der verschachtelten Triggerebenen zurück. Wenn der aktuelle Trigger der äußerste Trigger ist (der erste, der ausgeführt wird), beträgt die Verschachtelungsebene 1.
  • Wenn die Verschachtelungsebene größer als 1 ist, wird der Trigger von einem anderen Trigger aufgerufen und sollte übersprungen werden um eine Rekursion zu vermeiden.
  • Wenn die Verschachtelungsebene 1 ist, wird der Trigger nicht rekursiv aufgerufen und kann wie gewohnt fortfahren Ausführung.

Durch die Integration dieser Prüfung in den Trigger verhindern wir, dass er auf unbestimmte Zeit wiederholt wird, und stellen sicher, dass die erforderlichen Datenänderungen nur einmal durchgeführt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich rekursive Trigger in SQL Server verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage