Identifitseerimisväärtuse hankimise funktsioon SQL SERVER 2000-s SQL Server 2000-s määratletakse identiteediveerg IDENTITY abil ning järgmine on seotud viimase sisestatud kirje identiteediväärtuse saamisega
Näide funktsioonist välja
SQL Serveris saad kasutada SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() viimati sisestatud kirje väärtuse saamiseks ning nende erinevus on: SCOPE_IDENTITY() tagastab viimase IDENTITY-väärtuse, mis on lisatud IDENTITY-veeru sisse samas ulatuses. Scope on moodul – salvestatud protseduurid, päästikud, funktsioonid
Numbrid või partiid. Seega, kui kaks väidet on samas salvestatud protseduuris, funktsioonis või partiis, kuuluvad need samasse ulatusse. @@IDENTITY Tagastab viimase identifitseerimisväärtuse, mis genereeriti kõigis tabelites käesoleval sessioonil IDENT_CURRENT() tagastab viimase identifitseerimisväärtuse, mis genereeritakse määratud tabeli jaoks igas sessioonis ja igas ulatuses Siin on näide, mis illustreerib nende erinevusi
-- a) Näidiskood -- =========================================== -- Loo testtabel -- =========================================== KASUTA tempdb MINE
LOO TABEL t1(id int IDENTITY, col int) INSERT t1 SELECT 1 UNION KÕIK SELECT 2 LOO TABEL t2(id int IDENTITY, col int) MINE
LOO TRIGGER TR_insert_t2 T2-L FOR INSERT KUI SISESTA T1 VALIK 3 MINE
-- =========================================== -- Testi kolme funktsiooni: 1 -- =========================================== SISESTA T2 VÄÄRTUSED(1) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Kui t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() T2 jaoks]=IDENT_CURRENT(N't2')
/*--Tulemus SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 jaoks IDENT_CURRENT() T2 jaoks ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Mõjutatud ridade arv on 1 rida) --*/ MINE
-- =========================================== -- Testi kolme funktsiooni: 2 -- =========================================== SISESTA t1 VÄÄRTUSED(10) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Kui t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() T2 jaoks]=IDENT_CURRENT(N't2')
/*--Tulemus SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 jaoks IDENT_CURRENT() T2 jaoks ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Mõjutatud ridade arv on 1 rida) --*/ MINE
-- =========================================== -- Testi kolme funktsiooni: 3 -- ** Ava uus ühendus ja käivita järgmine kood ** -- =========================================== SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Kui t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() T2 jaoks]=IDENT_CURRENT(N't2')
/*--Tulemus SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 jaoks IDENT_CURRENT() T2 jaoks ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 &n
--=========================================== -- Kustuta testkeskkond -- =========================================== DROP TABEL t1,t2
-- b) Koodi tulemuse kirjeldus Nagu ülaltoodud koodist näha: IDENT_CURRENT() tagastab alati viimati tuvastatud väärtuse, mis sisestati määratud tabelisse @@IDENTITY Tagastab praeguse sessiooni identiteediväärtuse, olenemata sellest, kas see on samas ulatuses või mitte, testides 1 ja 2 on näha, et see tagastab käivitajasse sisestatud kirje identiteediväärtuse, ja
Testis 3 tagastatakse NULL, kuna praeguses sessioonis puudub sisestuskirje SCOPE_IDENTITY() tagastab sama praeguse sessiooni ulatuse identifitseerimisväärtuse, seega testides 1, 2 tagastatakse väärtus, mida päästik ei mõjuta, ja testis 3, sest praegust sessiooni ei interpoleerita
rekord, seega tagastatakse NULL
|