Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mencegah Pencetus Rekursif dalam Pelayan SQL?
Dalam SQL Server 2008, pencetus pada jadual tblMedia, [dbo].[tblMediaAfterInsertOrUpdate], secara tidak sengaja menyebabkan tingkah laku rekursif. Tingkah laku ini berlaku apabila pencetus dicetuskan dan seterusnya mencetuskan dirinya sendiri.
Untuk memahami masalah, mari kita periksa pencetus:
ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] ON [dbo].[tblMedia] BEFORE INSERT, UPDATE AS BEGIN ...
Selepas Sisip atau Kemas Kini: Pencetus dilaksanakan sebelum sisipan atau kemas kini dilakukan komited.
Potensi Rekursi: Pernyataan kemas kini di dalam pencetus cuba mengubah suai jadual tblMedia. Pengubahsuaian ini berpotensi mencetuskan pencetus yang sama sekali lagi, membawa kepada gelung tak terhingga.
Mencegah Rekursi: Untuk mengelakkan tingkah laku rekursif ini, kita boleh menggunakan fungsi TRIGGER_NESTLEVEL() untuk menyemak tahap bersarang daripada pencetus. Jika tahap bersarang lebih daripada 1, pencetus sedang digunakan oleh pencetus lain dan harus dilangkau.
ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] ON [dbo].[tblMedia] BEFORE INSERT, UPDATE AS BEGIN IF TRIGGER_NESTLEVEL() <= 1 /* Prevent recursion */ BEGIN ... END END
Penjelasan:
Dengan memasukkan semakan ini ke dalam pencetus, kami menghalangnya daripada berulang selama-lamanya dan memastikan pengubahsuaian data yang diperlukan dilakukan sekali sahaja.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Pencetus Rekursif dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!