Funcția de preluare a valorii de identificare în SQL SERVER 2000 În SQL Server 2000, coloana de identitate este definită de IDENTITY, iar următorul aspect este legat de obținerea valorii de identitate a ultimei înregistrări inserate
Un exemplu ilustrativ al funcției lui off
În SQL Server, poți folosi SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() pentru a obține valoarea ultimei înregistrări inserate, iar diferența dintre ele este: SCOPE_IDENTITY() returnează ultima valoare IDENTITY inserată în coloana IDENTITY în același scop. Un scop este un modul – proceduri stocate, declanșatoare, funcții
Numere sau loturi. Prin urmare, dacă două instrucțiuni sunt în aceeași procedură stocată, funcție sau lot, ele sunt în același scop. @@IDENTITY returnează ultima valoare de identificare generată în toate tabelele din sesiunea curentă IDENT_CURRENT() returnează ultima valoare de identificare generată pentru tabelul specificat în orice sesiune și în orice domeniu Iată un exemplu pentru a ilustra diferențele lor
-- a) Cod exemplu -- =========================================== -- Creează o masă de testare -- =========================================== USE tempdb DU-TE
CREATE TABLE t1(id int IDENTITY,col int) INSERT T1 SELECT 1 UNIUNEA TUTUROR SELECTEAZĂ 2 CREATE TABLE t2(id int IDENTITY,col int) DU-TE
CREEAZĂ TR_insert_t2 TRIGGER PE T2 PENTRU INSERT CA INSERT T1 SELECT 3 DU-TE
-- =========================================== -- Testează trei funcții: 1 -- =========================================== INSERAȚI VALORILE T2(1) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pentru t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Pentru t2]=IDENT_CURRENT(N't2')
/*--Rezultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pentru t1 IDENT_CURRENT() Pentru t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Numărul de rânduri afectate este 1 rând) --*/ DU-TE
-- =========================================== -- Testează trei funcții: 2 -- =========================================== INSERAȚI VALORILE T1(10) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pentru t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Pentru t2]=IDENT_CURRENT(N't2')
/*--Rezultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pentru t1 IDENT_CURRENT() Pentru t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Numărul de rânduri afectate este 1 rând) --*/ DU-TE
-- =========================================== -- Testează trei funcții: 3 -- ** Deschide o nouă conexiune și execută următorul cod ** -- =========================================== SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pentru t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Pentru t2]=IDENT_CURRENT(N't2')
/*--Rezultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pentru t1 IDENT_CURRENT() Pentru t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 & n
--=========================================== -- Șterge mediul de testare -- =========================================== DROP TABLE T1,T2
-- b) Descrierea rezultatului codului După cum puteți vedea din codul de mai sus: IDENT_CURRENT() returnează întotdeauna ultima valoare identificată introdusă în tabelul specificat @@IDENTITY returnează valoarea de identitate a sesiunii curente, fie că este în același domeniu sau nu, în testele 1 și 2 se poate observa că returnează valoarea de identitate a înregistrării inserate în declanșator și în
În Testul 3, NULL este returnat deoarece nu există o înregistrare de inserție în sesiunea curentă SCOPE_IDENTITY() returnează valoarea de identificare a aceluiași domeniu al sesiunii curente, astfel încât în testele 1, 2, returnează valoarea care nu este afectată de declanșator, iar în testul 3, deoarece sesiunea curentă nu este interpolată
record, deci returnează NULL
|