Funkcija pridobivanja identifikacijske vrednosti v SQL SERVER 2000 V SQL Server 2000 je stolpec identitete definiran z IDENTITETO, naslednje pa je povezano z iskanjem vrednosti identitete zadnjega vstavljenega zapisa
Primer ponazoritve funkcije izklopljene
V SQL Serverju lahko uporabite SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() za pridobitev vrednosti zadnjega vstavljenega zapisa, razlika med njima pa je: SCOPE_IDENTITY() vrne zadnjo vrednost IDENTITY, vstavljeno v stolpec IDENTITY v istem obsegu. Scope je modul – shranjene procedure, sprožilci, funkcije
Številke ali serije. Torej, če sta dva stavka v isti shranjeni proceduri, funkciji ali paketu, sta v istem obsegu. @@IDENTITY Vrne zadnjo identifikacijsko vrednost, generirano v vseh tabelah v trenutni seji IDENT_CURRENT() vrne zadnjo identifikacijsko vrednost, generirano za določeno tabelo v katerikoli seji in obsegu Tukaj je primer, ki ponazarja njihove razlike
-- a) Vzorčna koda -- =========================================== -- Ustvarite testno tabelo -- =========================================== UPORABI tempdb POJDI
USTVARI TABELO t1(id int IDENTITY,col int) VSTAVI t1 IZBERI 1 UNIJA ALL SELECT 2 CREATE TABLE t2(id int IDENTITY,col int) POJDI
USTVARI SPROŽILNO TR_insert_t2 NA T2 ZA VSTAVLJANJE KOT VSTAVI t1 IZBERI 3 POJDI
-- =========================================== -- Preizkusite tri funkcije: 1 -- =========================================== VSTAVI T2 VREDNOSTI(1) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Za t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Za t2]=IDENT_CURRENT(N't2')
/*--Rezultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Za t1 IDENT_CURRENT() Za t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Število prizadetih vrstic je 1 vrstica) --*/ POJDI
-- =========================================== -- Preizkusite tri funkcije: 2 -- =========================================== VSTAVI T1 VREDNOSTI(10) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Za t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Za t2]=IDENT_CURRENT(N't2')
/*--Rezultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Za t1 IDENT_CURRENT() Za t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Število prizadetih vrstic je 1 vrstica) --*/ POJDI
-- =========================================== -- Preizkusite tri funkcije: 3 -- ** Odpri novo povezavo in izvede naslednjo kodo ** -- =========================================== SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Za t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Za t2]=IDENT_CURRENT(N't2')
/*--Rezultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Za t1 IDENT_CURRENT() Za t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 &n
--=========================================== -- Izbrisati testno okolje -- =========================================== DROP TABLE t1,t2
-- b) Opis rezultata kode Kot lahko vidite iz zgornje kode: IDENT_CURRENT() vedno vrne zadnjo prepoznano vrednost, vstavljeno v določeno tabelo @@IDENTITY Vrne identitetno vrednost trenutne seje, ne glede na to, ali je v istem obsegu ali ne, v testih 1 in 2 lahko vidimo, da vrne identitetno vrednost vstavljenega zapisa v sprožilcu in v
V testu 3 se NULL vrne, ker v trenutni seji ni zapisa o vstavljanju SCOPE_IDENTITY() vrne identifikacijsko vrednost istega obsega kot trenutna seja, tako da v testu 1, 2 vrne vrednost, ki ni prizadeta s sprožilcem, v testu 3, ker trenutna seja ni interpolirana
record, zato vrne NULL
|