SQL SERVER 2000'de tanımlama değeri getirme fonksiyonu SQL Server 2000'de kimlik sütunu IDENTITY ile tanımlanır ve aşağıdaki durum son eklenen kaydın kimlik değerini almakla ilgilidir
Kapalı fonksiyonunun örnek bir örneği
SQL Server'da SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() kullanarak son eklenen kaydın değerini alabilirsiniz ve aralarındaki fark şudur: SCOPE_IDENTITY() aynı kapsamda IDENTITY sütununa eklenen son IDENTITY değerini döndürür. Bir kapsam, bir modüldür - saklanan prosedürler, tetikleyiciler, fonksiyonlar
Sayılar veya partiler. Bu nedenle, iki ifade aynı depolanmış prosedürde, fonksiyonda veya toplu sistemde ise, aynı kapsamdadırlar. @@IDENTITY Mevcut oturumdaki tüm tablolarda oluşturulan son tanımlama değerini döndürür IDENT_CURRENT() herhangi bir oturumda ve herhangi bir kapsamda belirtilen tablo için oluşturulan son tanımlama değerini döndürür İşte farklılıklarını göstermek için bir örnek
-- a) Örnek kod -- =========================================== -- Bir test tablosu oluşturun -- =========================================== TEMPDB KULLANIN GIT
CREATE TABLE t1(id int IDENTITY,col int) INSERT t1 SELECT 1 UNION ALL SELECT 2 CREATE TABLE t2(id int IDENTITY,col int) GIT
T2'DE TETIKLEYICI TR_insert_t2 OLUŞTUR INSERT IÇIN AS T1 SEÇ 3 EKLE GIT
-- =========================================== -- Üç işlevi test et: 1 -- =========================================== T2 DEĞERLERI GIRIN(1) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() t2 için]=IDENT_CURRENT(N't2')
/*--Sonuç SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 için IDENT_CURRENT() t2 için ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Etkilenen satır sayısı 1 satırdır) --*/ GIT
-- =========================================== -- Üç işlevi test et: 2 -- =========================================== T1 DEĞERLERI (10) GIRIN SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() t2 için]=IDENT_CURRENT(N't2')
/*--Sonuç SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 için IDENT_CURRENT() t2 için ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Etkilenen satır sayısı 1 satırdır) --*/ GIT
-- =========================================== -- Üç işlevi test et: 3 -- ** Yeni bir bağlantı açın ve aşağıdaki kodu çalıştırın ** -- =========================================== SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() t2 için]=IDENT_CURRENT(N't2')
/*--Sonuç SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 için IDENT_CURRENT() t2 için ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 &n
--=========================================== -- Test ortamını sil -- =========================================== TABLOYU DÜŞÜR t1,t2
-- b) Kod sonucu tanımı Yukarıdaki koddan da görebileceğiniz gibi: IDENT_CURRENT() her zaman belirtilen tabloda en son tanımlanmış değeri döndürür @@IDENTITY Mevcut oturumun kimlik değerini döndürür, aynı kapsamda olsun ya da olmasın, testler 1 ve 2'de, tetikleyicide eklenen kaydın kimlik değerini döndürdüğü görülebilir ve
Test 3'te, mevcut oturumda ekleme kaydı olmadığı için NULL döner. SCOPE_IDENTITY() mevcut oturumun aynı kapsamının tanımlama değerini döndürür, yani test 1, 2'de tetikleyiciden etkilenmeyen değeri döndürür, test 3'te ise mevcut oturum interpolasyon edilmediği için
kayıt, bu yüzden NULL döner.
|