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 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
Erklärung:
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!