18 Şubat 2016 Perşembe

Trigger Nedir Nasıl Kullanılır



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