—
CREATE
DROP
ALTER
INSERT
UPDATE
DELETE
BU İŞLEMLERİN HERHANGİ BİRİ YAPILDIĞI ZAMAN TRIGGER ÇALIŞIR (TETİKLEYİCİ)
Trigerin çalışması için sql agent ın çalışması gerekiyor
Genelde kullanılması tercih edilmez Kendi başlarına çalışırlar onun için…
Trigger a yaptığımız şeyleri stored procosedürlere tanımlayarak job bölümünden aynı işleri yaptırabilriz
select * from employees
alter table employees
add driverno varchar(15) null
— create trigger
for
instea of after dan sonra
delete,update,insert kullanılır
for delete,update,insert yapılıdığı anda bu işi yap
after delete,update,insert işlem yapıldıktan sonra bu işi yap demek
instea ise yapılan işlemi discard ederek kendisine yanımlanan işlemi yaptırır.
alter trigger Makeuniquedriverno
on employees –hangi table üzerinde çalışığını belirtiyorz
for insert,update — insert ve update oldupunda
as
if update(driverno) — employesin üzerinde çalışırkken yaplıan update içerisinde driver no update oluyosa
if exists ( select driverno from employees
where driverno is null and
driverno in (select distinct (driverno) from inserted)– eğer girilen veri drivernoda varsa
)
begin
select distinct (driverno) from inserted
raiserror (‘Driverno sistemde mevcuttur.’,16,1)
rollback tran
end– yapılan işlemli geri al
–trigerda özel 2 tablo var 1 inserted ve 2. deleted
–insert ve update olduğu zaman inserted da bekler
— girilen veriye kısıt verildiyse veri girildikten sonra kontrol için
— bi yerde beklemesi gerekiyor bunun için inserted da bekliyor.
–bi kayıt silinirse deleteed ı girer.
update employees
set driverno = ‘12345’
update employees
set driverno = ‘12347’
where employeeID = 1
select * from employees
alter trigger Makeuniquedriverno
on employees –hangi table üzerinde çalışığını belirtiyorz
for insert,update — insert ve update oldupunda
as
declare @driverno varchar(15)
declare @employeeID int
declare @intdriverno int
select @driverno = driverno , @employeeID=employeeID from inserted
set @newdriverno = (select convert(int,max,driverno)) + 1 from employees
if update(driverno)
begin
if exists ( select top 1 employeeID from employees
where driverno = @driverno
begin
update employees
set driverno = convert(varchar(15),@newdriverno)
where employeeID =@employeeID
select ‘driverno değiştirilecek kaydedildi…’
end
else
begin
update employees
set driverno @driverno
where employeeID = @employeeID
select ‘ driverno değiştirilmeden kaydedildi…’
end
end
create table triggertest
(
testId int not null primary key identity(1,1),
testAdi varchar(50) null,
testaciklama varchar(100)
)
declare @counter int
set @counter = 1
declare @testadi varchar(50)
declare @testaciklama varchar(100)
set @testadi = ‘test’
set @testaciklama = ‘Açıklama’
while @counter <= 20
begin
set @testadi = @testadi + convert(varchar(10),@counter)
insert into triggertest
values(@testadi,@testaciklama)
set @counter = @counter + 1
end
select * from triggertest
create trigger deleteonce
on triggertest
for delete
as
if (select count(*) from deleted) > 1
begin
raiserror (‘aynı anda birden fazla kayıt silemezsiniz.’,16,1)
rollback tran
end
delete from triggertest
where testID>1 — bu çalıştı ve birden fazla kayıt sildirmiyyor..
create table urunler
(
urunId int not null identity(1,1) primary key,
urunadi varchar(50) not null,
miktar int not null default(0)
)
create table musterisiparisleri
(
siparisId int not null identity(1,1) primary key,
urunId int not null,
miktar int not null default(0)
)
create table sirketsiparisleri
(
siparisId int not null identity(1,1) primary key,
urunId int not null,
miktar int not null
)
declare @urunadi varchar(50)
declare @miktar int
declare @counter int
set @counter = 1
while @counter <= 20
begin
set @urunadi = ‘ürün ‘ + convert (varchar(10),@counter)
set @miktar = 10 * @counter
insert urunler
values(@urunadi,@miktar)
set @counter = @counter + 1
end
alter table kullanicilar
(
kullaniciID int not null identity(1,1) primary key,
adsoyad varchar(100) not null,
kullanicitipi tinyint not null default(2))
— 1: Admin 2: Normal Kullanıcı
)
insert kullanicilar
values(‘Hasan Mansur’ ,1)
insert kullanicilar(adsoyad,kullanicitipi)
values(‘Murat KARAKUŞ’,1)
insert kullanicilar
values(‘Cafer KARAKUŞ’,2)
insert kullanicilar
values(‘mEHmet ÖZNUR’,2)
insert kullanicilar
values(‘Hasan Hüseyin’,2)
insert kullanicilar
values(‘Zeynel Yasan’,1)
select * from kullanicilar
truncate table kullanicilar — truncate
alter table admin
(
KullaniciId int not null primary key,
durum tinyint not null default(1) –0 silindi ; 1: Aktif
)
— trigger
alter trigger adminlog
on kullanicilar
for insert , update
as
declare @inserted_adsoyad varchar(100)
declare @inserted_KullaniciTipi tinyint
declare @yenikullaniciId int
declare @updated_kullaniciID int
select @inserted_adsoyad = Adsoyad,
@inserted_KullaniciTipi = KullaniciTipi
from inserted
–update için bundan sonrası
if update (KullaniciTipi)
begin
set @updated_kullaniciID = (select kullaniciId from inserted)
— yeni kullanıcı tipi admin ise
if @inserted_KullaniciTipi = 1
begin
— eğer bu kullanıcı admin tabloasunda yoksa ise ekle
if not exists(select top 1 kullaniciID from admin where KullaniciID =@updated_kullaniciID)
begin
insert admin
values (@updated_kullaniciID)
print ‘kayıt admine eklendi’
end
end
else — kullanıcı yeni ise tipi = 2 yani normal kullanıcı
begin
–eğer bu kullanıcı tipi varsa sil
if exists(select top 1 kullaniciID from admin where KullaniciID = @updated_kullaniciID)
begin
insert admin
values (@updated_kullaniciID)
print ‘kayıt adminden silindi Vallaha’
end
end
if @inserted_KullaniciTipi = 1
begin
select @yenikullaniciID = @@identity — kullanıcının verilen ID nin dönmesi görmek için
insert admin values(@yenikullaniciId,1)
print ‘Kullanıcı Tipi Admine Yazıldı’
end
else
print ‘Kullanıcı Tipi Admine Yazılmadı’
select * from admin
Trigger Nedir Nasıl Kullanılır
Hiç yorum yok:
Yorum Gönder