Trigger, Türkçe anlamıyla Tetikleyici demektir. Bir tabloda değişiklik yaptığımızda başka tablolarda da otomatik değişiklik yapılmasını sağlar.
create trigger TrigerName on TableName
for Insert –TableName
as
Insert into TableName(Aciklama)
values(‘Trigger test edildi’)
@IDENTITY – SCOPE_IDENTITY VE IDENT_CURRENT
@IDENTITY
Açılmış olan bağlantıda son üretilen identity değerini dödürür.
@@Identiy tablo ve scope bakmaksızın, connectionda üretilen so identity’yi verir.DİKKAT:Eğer insert yaptığımız tabloda TRIGGER varsa, yanlış Identity alabiliriz.
SCOPE_IDENTITY
Açılmış olan bağlantıda ve sorgunun çalıştığı scope’ta son üretilen identity’yi dödürür.
Trigger kullanılan tablolarda Identity yerine scope_identity kullanılması tavsiye edilir.
IDENT_CURRENT(tableName)
Bağlantı ve scope bakılmaksızn, parametre olarak verilen tabloda üretilen son identity değerini döndürür.
create table DenemeTablo1(
Id int not null Identity(1,1),
Aciklama nvarchar(50) null
)
create table DenemeTablo2(
Id int not null Identity(1,1),
Aciklama nvarchar(50) null
)
create trigger trg_test on DenemeTablo1
for Insert --denemetablo1'e birşey insert edildiğinde
as
Insert into DenemeTablo2(Aciklama)
values('Trigger test edildi')
select*from DenemeTablo2 --DenemeTablo2'deki verileri kontrol ettik.
insert into DenemeTablo2(Aciklama) values ('Deneme') --önce denemetablo2ye değerler ekledik
insert into DenemeTablo1(Aciklama) values ('Deneme') --sonrasında denemetablo1'e ekledik bu triggerı çalıştırarak denemetablo2ye değer ekledi

select @@IDENTITY --sistem içerisinde en son yapılan işlem(id'yi) çek(tablo2ye eklenen verinin id'si)
union all
select SCOPE_IDENTITY() --trigger'a bakmadan (kullanıcı tarafından yapılan) en son yapılan işlemi(idyi) çek
union all
select IDENT_CURRENT('DenemeTablo1') --DenemeTablo1'de yapılan işlemi çek


Yorum bırakın