Identifikavimo reikšmės gavimo funkcija SQL SERVER 2000 SQL Server 2000 tapatybės stulpelis apibrėžiamas pagal IDENTITY, o toliau nurodyti dalykai yra susiję su paskutinio įterpto įrašo tapatybės reikšmės gavimu
Išjungimo funkcijos pavyzdys
SQL serveryje galite naudoti SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT(), kad gautumėte paskutinio įterpto įrašo reikšmę, o skirtumas tarp jų yra: SCOPE_IDENTITY() grąžina paskutinę IDENTITY reikšmę, įterptą į tos pačios aprėpties stulpelį IDENTITY. Taikymo sritis yra modulis - saugomos procedūros, trigeriai, funkcijos
Skaičiai arba partijos. Todėl, jei du sakiniai yra toje pačioje saugomoje procedūroje, funkcijoje ar pakete, jie yra toje pačioje aprėptyje. @@IDENTITY Pateikia paskutinę identifikavimo reikšmę, sugeneruotą visose dabartinio seanso lentelėse IDENT_CURRENT() grąžina paskutinę nurodytos lentelės identifikavimo reikšmę, sugeneruotą bet kuriame seanse ir bet kurioje aprėptyje Štai pavyzdys, iliustruojantis jų skirtumus
-- a) Pavyzdžio kodas -- =========================================== -- Sukurkite bandomąją lentelę -- =========================================== NAUDOKITE tempdb EITI
CREATE TABLE t1(id int IDENTITY,col int) INSERT t1 SELECT 1 SĄJUNGA VISI PASIRINKTI 2 CREATE TABLE t2(id int IDENTITY,col int) EITI
SUKURKITE PALEIDIKLIO TR_insert_t2 T2 ĮTERPIMUI KAIP INSERT t1 SELECT 3 EITI
-- =========================================== -- Išbandykite tris funkcijas: 1 -- =========================================== ĮRAŠYTI T2 REIKŠMES [1] PASIRINKITE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')
/*--Rezultatas SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Paveiktų eilučių skaičius yra 1 eilutė) --*/ EITI
-- =========================================== -- Išbandykite tris funkcijas: 2 -- =========================================== ĮRAŠYTI T1 REIKŠMES [10] PASIRINKITE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')
/*--Rezultatas SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Paveiktų eilučių skaičius yra 1 eilutė) --*/ EITI
-- =========================================== -- Išbandykite tris funkcijas: 3 -- ** Atidarykite naują ryšį ir vykdykite šį kodą ** -- =========================================== PASIRINKITE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')
/*--Rezultatas SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 &n
--=========================================== -- Ištrinkite testavimo aplinką -- =========================================== NULEIDŽIAMAS STALAS T1,T2
-- b) Kodo rezultato aprašymas Kaip matote iš aukščiau pateikto kodo: IDENT_CURRENT() visada grąžina paskutinę identifikuotą reikšmę, įterptą į nurodytą lentelę @@IDENTITY Grąžina dabartinio seanso tapatybės reikšmę, nesvarbu, ar ji yra toje pačioje aprėptyje, ar ne, atliekant 1 ir 2 bandymus galima pastebėti, kad ji grąžina įterpto įrašo tapatybės reikšmę paleidiklyje, o
3 bandyme grąžinama NULL, nes dabartiniame seanse nėra įterpimo įrašo SCOPE_IDENTITY() grąžina tos pačios dabartinio seanso aprėpties identifikavimo reikšmę, todėl atliekant 1, 2 bandymus grąžinama reikšmė, kuriai paleidiklis neturi įtakos, o 3 teste, nes dabartinis seansas nėra interpoliuojamas
įrašą, todėl grąžina NULL
|