Normalde bir sql tablosunda veri sildiğinizde bu veriye ulaşmazsınız ve geri almak için gerekli ayarlar(recovery model; full, bulk logged) yapıldıysa bile bu biraz uğraştırabilir. Bu yüzden veri kaybından korunmak için çeşitli yöntemler kullanılır.
Bu yöntemlerden biri, özellikle hassas veriler içeren tablolarda veri kaybından korunmak için kullanılan soft delete(table düzeyinde) işlemini açıklamaya çalışacağım.
Mevcut tablomuza “isDelete” isminde bir kolon ekliyoruz. Ben isDelete olarak kullandım siz farklı bir isim kullanabilirsiniz. Sql server arayüzünden de yapabilirsiniz, ben aşağıdaki kodları kullandım, bit veri tipi olarak ve default olarak 0 olacak şekilde ekledim.
ALTER TABLE tabloAdi
ADD isDeleted BIT NOT NULL DEFAULT 0;
GO
Daha sonra bu tablomuzda kullanıcın delete işlemi yaptığında yakalayacak bir trigger yazıyoruz. Burada “instead of” yapısını kullanacağız. Böylece “silmek yerine bunu yap” demiş olacağız sql server’a.
CREATE TRIGGER triggerIsmi ON tabloAdi
INSTEAD OF DELETE
AS
BEGIN
UPDATE tabloAdi SET isDeleted =1 WHERE ID IN (SELECT ID FROM DELETED)
-- silme işlemi yapılacak satırın id'sini çektik ve o id nin olduğu satırda isDelete değerini 1 olarak güncelledik.
END
Bu trigger kodlarını çalıştırıp kaydettiğinizde, tablodan kayıt silindiğinde silmek yerine isDeleted kolonunu 1 olarak güncellediğini görebilirsiniz. Böylelikle hatalı silme işlemi yapıldığında veri kaybına uğramadan silinmiş veriyi de görebiliyoruz.
Verileri çekerken silinmiş olanları getirmemesi için kullanıcıya göstereceğimiz verilerde silme işlemi yapılmamış verileri aşağıdaki query ile çekebiliriz.
SELECT * FROM tabloAdi WHERE isDeleted=0
Kolaylıklar dilerim.