Transact SQL(T-SQL)’de @@IDENTITY, SCOPE_IDENTITY() ve IDENT_CURRENT() Komutları

T-SQL’de identity kolonlarla çalışırken yeni üretilen değerleri elde etmemiz gerekebilir. İşte bu ihtiyaca dönük @@IDENTITY komutu yahut SCOPE_IDENTITY() ve IDENT_CURRENT() fonksiyonları kullanılabilir. Peki bu üç komut arasındaki temel farklar nelerdir? gelin ortaya çıkaralım.

@@IDENTITY

Açılmış olan bağlantıda(connection) tablo yahut sorgunun çalıştığı scope’a bakmaksızın son üretilen identity değerini vermektedir.

(Dikkat!!! Trigger kullanılan sorgularda yanlış sonuç alma ihtimalinden dolayı kullanılması tavsiye edilmez.)

SCOPE_IDENTITY

Açılmış olan bağlantıda(connection) ve sorgunun çalıştığı scope’ta son üretilen identity değerini döndürür.

(Dikkat!!! Trigger kullanılan sorgularda @@IDENTITY yerine bu fonksiyonun kullanılması tavsiye edilir.)

IDENT_CURRENT(TabloAdi)

Bağlantı ve sorgunun çalıştırıldığı scope’a bakmaksızın parametre olarak verilen tabloda üretilen sonuncu identity değerini döndürür.

Şimdi bu üç farklı komut üzerine aşağıdaki örneği inceleyelim.
Veritabanı ve tablolarımız…

CREATE DATABASE ORNEKVERITABANI

CREATE TABLE ORNEKTABLO1
(
	ID INT PRIMARY KEY IDENTITY,
	KOLON1 NVARCHAR(MAX),
	KOLON2 NVARCHAR(MAX)
)

CREATE TABLE ORNEKTABLO2
(
	ID INT PRIMARY KEY IDENTITY,
	KOLON1 NVARCHAR(MAX),
	KOLON2 NVARCHAR(MAX)
)

Triggerımız…

USE ORNEKVERITABANI

CREATE TRIGGER KONTROL
ON ORNEKTABLO1 FOR INSERT
AS
INSERT ORNEKTABLO2 VALUES('', '')

Sorgularımız…

INSERT ORNEKTABLO2 VALUES('1','1')
INSERT ORNEKTABLO2 VALUES('2','2')
INSERT ORNEKTABLO2 VALUES('3','3')
INSERT ORNEKTABLO2 VALUES('4','4')
INSERT ORNEKTABLO2 VALUES('5','5')

INSERT ORNEKTABLO1 VALUES('6','6')

SELECT @@IDENTITY
UNION ALL
SELECT SCOPE_IDENTITY()
UNION ALL
SELECT IDENT_CURRENT('ORNEKTABLO1')

Sonuç olarak…
Transact SQL(T-SQL)'de @@IDENTITY, SCOPE_IDENTITY() ve IDENT_CURRENT() Komutları
Dikkat ederseniz @@Identity komutu bir tabloya 5 kayıt diğer tabloya 1 kayıt gerçekleştirdiği halde 6 olarak göstermektedir. Bu yüzden trigger kullandığımız sorgularda @@identity komutunu tavsiye etmemekteyiz. SCOPE_IDENTITY fonksiyonu çalıştırılan scope’da son üretilen identity değerinin ORNEKTABLO1 tablosunda ilk kayıt olmasından dolayı 1 değerini verdiğini görmekteyiz. Ayriyetten IDENT_CURRENT fonksiyonuda ilgili tablo içerisindeki son değeri vermektedir.

Gördüğünüz gibi aynı işi farklı yöntem ve işleyişlerle yapan üç farklı komutturlar.

Sonraki yazılarımızda görüşmek üzere…
İyi çalışmalar dilerim…

Bunlar da hoşunuza gidebilir...

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

CAPTCHA (Şahıs Denetim Kodu) Resmi

*

Copy Protected by Chetan's WP-Copyprotect.