Alper ÇELİK

Bilgisayar Mühendisi

Trigger_4

Resim1'deki şema uyarınca elimizde tblEmployees ve tblDepartment isimli 2 adet tablo mevcut. Bu tablolar üzerinden vw_EmployeeDetails isimli bir view oluşturuyoruz.
 
Şayet bu view üzerinden bir silme işlemi gerçekleştirmeye kalkarsanız, örneğin;
 
delete from vw_EmployeeDetails where ID=1
 
Şu şekilde bir hata koduyla karşılaşırsınız:
View or function 'vw_EmployeeDetails' is not updatable because the modification affects multiple base tables.
 
Yani silmeye çalıştığınız view birden fazla ana tablodan oluştuğu için SQL Server bu işlemi yapamıyor. Dolayısıyla bu yükün altından kalkabilmemiz için bu view üzerinden bir trigger tanımlamamız gerekiyor.  
 
CREATE TRIGGER trg_vw_EmployeeDetails_INSTEADOFDELETE
ON vw_EmployeeDetails
INSTEAD OF DELETE
AS
BEGIN  
DELETE tblEmployees
FROM tblEmployees t JOIN deleted d ON t.ID=d.ID
END
 
Not: Çoğu zaman JOIN, SUB-QUERY'den daha hızlı çalışır. Ancak bir tablodaki alt kümeye ihtiyacınız var ise SUB-QUERY kullanılması makul olabilir. Aşağıda aynı örneğimizi SUB-QUERY kullanarak çözümlüyoruz.  
 
ALTER TRIGGER trg_vw_EmployeeDetails_INSTEADOFDELETE
ON vw_EmployeeDetails
INSTEAD OF DELETE
AS
BEGIN  
DELETE FROM tblEmployees
WHERE ID IN (SELECT ID FROM deleted)
END
 
Bu tanımlamadan sonra artık view üzerinde silme işlemlerini rahatlıkla yapabilir konuma gelmiş oluyoruz.

Trigger Serisinin İlk Bölümüne Buradan Ulaşabilirsin

Trigger'lar özelleşmiş bir tür stored prosedürlerdir(SP).