SENARYO:

Diyelim ki bir okul projesi için veritabanı tasarlıyoruz.Burda öğrencileri tutuyoruz. Tabiyki okuldan ayrılan öğrencilerde oluyor.Bunlarında okuldan ayrılmaları için 3 seçenek var ya okuldan atılıcak ya mezun olucak yada taşınma sebebiyle okuldan ayrılacak...Ama bizim okuldan atılsada mezun olunsada bu öğrencilerin kayıtlarını veritabanından silmemiz mümkün değil ve biz öyle bir trigger yazıcaz ki "Ayrılanlar veya Mezunlar" tablosuna kayıt girildiği anda otomatik olarak Öğrenciler tablosundaki öğrenciyi pasif duruma düşürücez yani Öğrenciler tablosuna baktığımız anda o öğrencinin artık okulda olmadığı belli olucak


TABLOLAR ŞU ŞEKİLDE :

CREATE TABLE Ogrenciler
(
OgrenciID int not null identity (1,1primary key clustered,
Ad varchar(100),
Soyad varchar(100),
Numara varchar(100),
Sinif varchar(100),
Bolum varchar(100),
DevamEdiyormu bit
)
GO
--BURDAKİ DEVAM EDİYORMU KOLONU 0 İSE DEVAM ETTİĞİNİ
--1 İSE OKULDAN AYRILDIĞINI GÖSTERİCEK.

CREATE TABLE Mezunlar
(
MezunlarID int no tnull identity(1,1) primary key clustered,
OgrenciID int,
Tarih datetime,
MezuniyetNotu varchar(25)
)
GO


CREATE TABLE Ayrilarlar
(
AyrilarlarID int not null identity(1,1) primary key clustered,
OgrenciID int,
AyrilmaSebebi bit
)
GO
-- AYRILMA SEBEBİNE 0 GİRERSEM OKULDAN ATILDIĞI,1 GİRERSEM TAŞINMA SEBEBİYLE OKULDAN AYRILDIĞINI TUTUCAM.



--ÖĞRENCİLER TABLOSUNA KAYIT GİRİYORUM.
insert into Ogrenciler

values('Kemal','Tanca',144,'11-A','FM',0)
values('Haluk','Ulusoy',166,'11-B','FM',0)
values('Reha','Muhtar',886,'11-C','TM',0)
values('Serap','Ezgü',555,'5-B','ilk öğretim',0)
values('Michael','Jordan',133,'5-C','ilk öğretim',0)
select*from Ogrenciler



Şimdi öyle bir trigger yazıcam ki.Ayrılanlar tablosunun OgrenciID Veya Mezunlar tablosunun ogrenciID kolonuna kayıt girildiği anda Ogrenciler tablosunun devam ediyor mu kolonu direk olarak (1) olucak.Benim Geri dönüp öğrenciler tablosu üzerinde hiçbir kayıt girmeme gerek kalmıycak.

BUNUN İÇİN 2 TABLO İÇİNDE TRIGGER YAZICAM VE BU TABLOLARA KAYIT GİRİLDİĞİ ANDA TRIGGERLAR TETİKLENECEK.


CREATE Trigger DevamEdiyormu
on Mezunlar
AFTER insertAS
declare @OgrenciID int
SET @OgrenciID =(select inserted.OgrenciID from inserted)
UPDATE Ogrenciler
set DevamEdiyormu = 1
where OgrenciID = @OgrenciID
---
CREATE Trigger DevamEdiyormu2
on Ayrilanlar
AFTER insertAS
declare @OgrenciID int
SET @OgrenciID =(select inserted.OgrenciID from inserted)
UPDATE Ogrenciler
set DevamEdiyormu = 1
where OgrenciID = @OgrenciID



--İLK YAZDIĞIM TRIGGERLA İKİNCİSİNİN MANTIĞI TAMAMEN AYNI İLKİNDE NE YAPMAYA ÇALIŞTIĞIMI DETAYLI OLARAK AÇIKLIYORUM.

on
Mezunlar => Trigger mezunlar tablosu üzerinde çalışacak.

AFTER
insert => Trigger mezunlar tablosunda kayıt girildikten sonra
çalışacak.


declare
@OgrenciID int
SET @OgrenciID =(select inserted.OgrenciID from inserted)

=> ÖğrenciID adında bir değişken declare ediyorum Mezunlar tablosuna eklenen OgrenciID yi inserted dan çekip declare ettiğim değişkene setliyorum.



UPDATE
Ogrenciler
set DevamEdiyormu = 1
where OgrenciID = @OgrenciID


=> mezunlara eklenen öğrenciID yi setleyerek almıştım. Bu id değeriyle Oğrenci Tablosunda aynı id değerine sahip olan devam ediyormu field ını 1 yapıyorum.