Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mencegah Rekursi dalam Pencetus SQL Server?

Bagaimana untuk Mencegah Rekursi dalam Pencetus SQL Server?

Susan Sarandon
Lepaskan: 2025-01-04 21:14:39
asal
267 orang telah melayarinya

How to Prevent Recursion in SQL Server Triggers?

Mencegah Rekursi dalam Pencetus Pelayan SQL

Pencetus ialah alat berkuasa dalam pengurusan pangkalan data, membenarkan pembangun melaksanakan tindakan tersuai apabila peristiwa tertentu berlaku dalam pangkalan data. Walau bagaimanapun, pencetus juga boleh membawa kepada rekursi yang tidak diingini, di mana pencetus memanggil dirinya sendiri, mengakibatkan gelung tidak terhingga.

Dalam SQL Server, pencetus boleh dibuat untuk melaksanakan secara automatik apabila jadual diubah suai melalui sisipan, kemas kini atau memadam operasi. Untuk mengelakkan pengulangan, adalah penting untuk melaksanakan semakan dalam kod pencetus untuk membezakan antara kemas kini yang dimulakan oleh pencetus itu sendiri dan kemas kini yang datang daripada sumber lain.

Satu pendekatan untuk mengelakkan pengulangan ialah menyemak tahap bersarang bagi pencetus menggunakan fungsi TRIGGER_NESTLEVEL(). Fungsi ini mengembalikan tahap sarang semasa pencetus, menunjukkan bilangan kali ia telah dilaksanakan secara rekursif. Jika tahap sarang semasa adalah lebih daripada 1, ini menunjukkan bahawa pencetus sedang dilaksanakan daripada tindakan pencetus lain, dan oleh itu tiada tindakan lanjut diperlukan.

Berikut ialah kod pencetus yang dikemas kini yang menggabungkan pendekatan ini:

ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] 
   ON  [dbo].[tblMedia]
   BEFORE INSERT, UPDATE
AS 
BEGIN
    SET NOCOUNT ON

    DECLARE @IdMedia INTEGER,
        @NewSubject NVARCHAR(200)   
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mencegah Rekursi dalam Pencetus SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan