sql server trigger kullanımı

sql server trigger kullanımı

sql server trigger kullanımı nasıl yapı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

 

Trigger Yapısı

–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

Trigger Anlama

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

 

sql server trigger kullanımı

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

 

trigger kullanımı

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

Ayrıca Buna Bakabilirsiniz

SQL Server: Login failed for User ‘NT AUTHORITY\ANONYMOUS LOGON

SQL Server: Login failed for User ‘NT AUTHORITY\ANONYMOUS LOGON’ Merhaba bu hata www.sqlogren.com sitesindeki en …

Yorumlar

  1. trigger ile bir tablo oluşturdum ve oluşturduğum bu tabloya aynı trigger üzerinden nasıl yeni bir trigger eklerim? içiçe trigger kullanılır mı?