Tüm Kayıt İşlemlerini Engellemek
Veritabanında bir tabloda kayıt işlemlerini nasıl engelleriz. Bu işlem pek kullanılmaz desemde olmadık zamanda karşımıza çıkabiliyor.
Kısaca Trigger kullanarak Ekleme, Silme, Güncelleme (Insert,Update,Delete) işlemini nasıl engellerim bir ele alalım. Bunun için veritabanım trigger desteklemesi gerek, MS Sql, MySql vb. Gidipte Microsoft Access gibi veritabanlarında trigger aramayın çünkü bulamassınız. Veritabanları konusunda daha detaylı makalaler yazınca buraya eklerim.
Bir örnek yaparak konuyu bitirelim,
SQL serverımda "Test" isimli bir veritabanı oluşturdum. Veritabanıma 1 adet "Uyeler" isimli bir tablo uluşturup, içince 2 adet denemek için bir kayıt girdim. Trigger oluşturmak için aşağıdaki resimde gördüğünüz gibi Trigger yazan kısmın üstünde sağ tuşa tıklayıp "New Trigger" deyin. (Şekil 1)

Şekil.1
Açılan sorgu ekranına aşağıdaki komutu girip "Execute" Butonuna tıklayın veya "Sorgu çalıştır" butonuna tıklayın. Trigger tabloya eklenecektir, aşağıdaki kod tabloya ekleme,düzenleme,silme gibi işlemler yapıldığı zaman hata mesajı verip işlem yaptırtmayacaktır.
CREATE TRIGGER [Uyeler_KayitTrigger]
ON [[Uyeler]
AFTER INSERT,UPDATE,DELETE
AS
BEGIN
RAISERROR ('Kayıt işlemi engellendi.', 16, 1);
ROLLBACK TRANSACTION;
RETURN
END;
Sadece ekleme , sadece düzenleme veya sadece silme işlemlerinden birinin blokesini yapmak istiyorsanız. Kod satırındaki
AFTER INSERT,UPDATE,DELETE
bu bölümde değişiklik yapabilirsiniz.
AFTER INSERT => Sadece ekleme işlemini kısıtla,
AFTER UPDATE => Sadece güncelleme işlemini kısıtla,
AFTER DELETE => Sadece silme işlemini kısıtla,
AFTER INSERT, DELETE => Sadece ekleme ve silme işlemini kısıtla, vb..

Kriter Kullanarak Kayıt İşlemleri Engellemek
Tablodaki tek bir kaydın veya herhangi bir kritere göre kayıt kısıtlaması da yapabilirsiniz. Aşağıdaki kod bloğunda Id'si 1 olanında kayıt işlemini kısıtladık. Örnekler genişletilebilir.
CREATE TRIGGER [Uyeler_KayitTrigger]
ON [Uyeler]
AFTER INSERT,UPDATE,DELETE
AS
BEGIN
IF EXISTS ( select * from inserted where Id=1 )
BEGIN
RAISERROR ('Kayıt işlemi engellendi.', 16, 1);
ROLLBACK TRANSACTION;
RETURN
END
END
IF EXISTS ( select * from inserted where Id<5 )
--Id'si 5 ten küçüklerin kayıt işlemini engelle vb....
Örnek kod.
- Örnek Test Script (.zip)
0 kb | 14 indirme
İndir