-----------------TRIGGER---------------------------
/*
Trigger=>Tetikleyici
dml
for(after)
instead of(yerine)
dll
*/
-- Yeni bir lategori eklendiğinde yeni kategori eklendi mesajını veren bir trigger yazalım
create trigger tg_YeniKategoriEklendi
on categories
for insert
as
select 'Yeni kategori Eklendi'
--Kategori ekleip sonuca bakalım
insert into Categories(CategoryName)
values ('KatKat')
--Calısanlar tablosunda yapılan insertte eklenen çalışanın ad ve soyad bilgilerinin listeleyen bir trigger
create trigger tg_CalisanEklendi
on Employees
for insert
as
select FirstName,LastName
from inserted --inserted eklenen kaydın bilgilerini tutan tablo veri tipi ntext olanları çekemeyiz.
insert into Employees(FirstName,LastName,Title)
values ('Ilkkan','Acikgoz','Akademisyen')
--Kategoriler tablosundan silinen kaydın ID değerini ekrana yazdıracak bir trigger.
create trigger tg_KayitSilindi
on Categories
for delete
as
select CategoryID
from deleted
delete from Categories where categoryID=11
--Categories tablosunda bir update işlemi meyadana geldiğinde CategoryName kolunun eski ve yeni bilhigini ekrana yazdırınız.
create trigger tg_KategoriUpdateEdildi
on Categories
for update
as
declare @eski varchar(15),@yeni varchar(15)
select @eski=CategoryName from deleted
select @yeni=CategoryName from inserted
declare @bilgi varchar(70)
set @bilgi='Eski adı '+@eski+' olan Kategorinin yeni adı '+@yeni+' oldu.'
select @bilgi
--update işlemi yapalım
update Categories set CategoryName='TgCi Kat' where CategoryID=10
--İnstead of trigger hazırlık
--önce çalışan tablosuna kolon ekleyelim
alter table Employees
add SilindiMi bit
--tüm çalışanların silindi mi değerlerini fals yapalım
update Employees set SilindiMi=0
-- uygulamaların kullanacağı tüm çalışanların ad ve soyadlarını ve id değerlerini getiren bir proc yazınız
create proc up_CalisanBilgisiniGetir
as
Select EmployeeID,FirstName,LastName
from Employees where SilindiMi=0
--patrona yıllık rapor sunarken kullanılacak çalışan listesi
create proc up_PatronIcınCalisanGetir
as
select EmployeeID,FirstName,LastName
from Employees
--Çalışan kayıtlarının silinmesini engelle
create trigger tg_CalisanlarSiliniyor
on Employees
instead of delete --silinme işlemi yerine şunu yap anlamında
as
declare @silinecekID int
select @silinecekID=EmployeeID from deleted
update Employees set SilindiMi=1
where EmployeeID=@silinecekID
/*
.mdf .ldf
insert=> 1 Caglar
1 Caglar <=commit(onaylanırsa)
insert=> 2 Murat
tollback(başa sar)
insert=> 3 Murat
3 Murat <=commit(onaylanırsa)
*/
--Calısanlardan en son eklenen çalışanı silecek komutu yazınız
delete from Employees where EmployeeID=
(
select max(EmployeeID) from Employees
)
--Patron rapor istedi
exec up_PatronIcınCalisanGetir
--uygulama çalışanşları çeksin
exec up_CalisanBilgisiniGetir