Trigger

-----------------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