FOR ve AFTER tetikleyicileri arasındaki fark nedir?


Yanıtlar:


154

Fark yok, aynı şeyi yapıyorlar.

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE

Aynıdır

CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE

Bir INSTEAD OFtetikleyici farklıdır ve ekten önce ve onun yerine tetiklenir ve uygun değerleri temel tablolara eklemek için görünümlerde kullanılabilir.


14
Tetikleyicileri kullanan görünümlere eklemeler hakkındaki yorumu beğendim. Çok faydalı bilgiler. Şerefe.
Mariusz

Afedersiniz Bay @Ben, Bir görünüme eklemek için senaryo ne olur ? Teşekkürler ^ - ^
Jeancarlo Fontalvo

@JeancarloFontalvo, 1) uyumluluk. Görünümün aynı kalması koşuluyla, temel tablolar değişebilir. 2) erişim kontrolü, belirli kullanıcıların yalnızca belirli sütunlara yazma izni olabilir.
Ben

17

@Ben kesinlikle haklı.

İşte SQL Server Tetikleyicilerini Keşfetme MSDN makalesi

Makaleden bir paragraf:

Bu sözdizimi, SQL Server'ın eski sürümlerinde de kabul edilebilir. Ancak, şimdi SQL Server 2000'de iki tür tetikleyici olduğuna göre, FOR tetikleyicilerine AFTER tetikleyiciler olarak atıfta bulunmayı tercih ediyorum. Bu nedenle, bu makalenin geri kalanında AFTER veya INSTEAD OF tetikleyicilerine değineceğim.

Daha önce gördüğünüz AFTER tetikleyicisi gibi, bu tetikleyici soyad alanında değişiklik yapılmasını engeller. Ancak, bu iş kuralını önceki örnekten farklı bir şekilde uygulamaktadır. INSTEAD OF tetikleyicisi UPDATE ifadesi yerine tetiklendiğinden, INSTEAD OF tetikleyicisi daha sonra iş kuralı testinin başarılı olup olmadığını değerlendirir. İş kuralı testi başarılı olursa, güncellemenin gerçekleşmesi için INSTEAD OF tetikleyicisinin açıkça UPDATE ifadesini yeniden çağırması gerekir.


4

AFTER, DML tetikleyicisinin yalnızca tetikleyici SQL deyiminde belirtilen tüm işlemler başarıyla yürütüldüğünde tetiklendiğini belirtir. Bu tetikleyici etkinleşmeden önce tüm bilgi basamaklı eylemler ve kısıtlama denetimleri de başarılı olmalıdır. FOR, belirtilen tek anahtar sözcük olduğunda AFTER varsayılandır.

SONRA tetikleyiciler görünümlerde tanımlanamaz.

INSTEAD OF Tetikleyen SQL ifadesi yerine DML tetikleyicisinin yürütüldüğünü, dolayısıyla tetikleme ifadelerinin eylemlerini geçersiz kıldığını belirtir. INSTEAD OF, DDL veya oturum açma tetikleyicileri için belirtilemez.

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql


1
Bu ifade "AFTER, FOR belirtilen tek anahtar kelime olduğunda varsayılandır." çok kafa karıştırıcı. Daha iyi ifade edebilirlerdi.
FMFF
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.