2 Nisan 2011 Cumartesi

@@Identity,Scope_Identity() ve IdentCurrent

Sql'de insert vs. gibi işlemler yapılırken, elde edilen Id'yi veya değişiklik yapılan Id'yi tutmak isteriz. Yani Son işlem yapılan sorgunun id'sine erişmek isteyebiliriz. Özellikle Stored Procedure'lerde veya Triggerlarda yeni eklenen öğrencinin bilgilerini farklı sorguda kullanmak isteyeceğimiz zaman, bu öğrencinin id'sine ihtiyaç duyarız. İşte bu Id'yi yakalamanın yollarını ve birbirleriyle olan farklarını anlatmaya çalışacağım şimdi.

1-@@IDENTITY:

Son işlem yapılan sorgudan elde edilen Id'yi elde etmemizi sağlar. Aşağıdaki örnekte, insert yapıldıktan sonra ortaya çıkan Id şu şekilde bulunmuştur.

insert into Ogrenci values ('Ergin Arslan',81,12345)

(1 row(s) affected)

dedikten sonra aşağıdaki komutu çalıştırırsak, şu çıktıyı elde ederiz;


select @@IDENTITY


@@Identity'nin dezavantajı, Trigger içerisinde kullanılamamasıdır. Bu komut yerine daha çok Scope_Identity() kullanılır.

2-SCOPE_IDENTITY:

Yukarıda da bahsettiğimiz gibi, @@Identity'den farkı, triggerlar içerisinde kullanılabilmesidir. Ayrıca, @@Identity, herhangi bir scope'dan ve tablodan bağımsız çalışır. Scope_Identity, sadece bulunduğu scope'taki id sonucunu getirir. Trigger, StoredProcedure ... vs. işlemlerde kullanılabilir. En çok tercih edilen yöntemdir. Kullanılışı;

insert into Ogrenci values ('Ergin Arslan',81,12345)
select SCOPE_IDENTITY()


3-IDENT_CURRENT('TabloAdı'):

Parametre olarak aldığı tablodaki son işlem yapılan id'nin sonucunu getirir. Kullanılışı;

insert into Ogrenci values ('Ergin Arslan',81,12345)
select IDENT_CURRENT('Ogrenci')


0 yorum: