Identifikasjonsverdihentingsfunksjon i SQL SERVER 2000 I SQL Server 2000 defineres identitetskolonnen av IDENTITY, og følgende er relatert til å hente identitetsverdien til den siste innsatte posten
Et eksempel på en illustrasjon av funksjonen til av
I SQL Server kan du bruke SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() for å hente verdien av den siste innsatte posten, og forskjellen mellom dem er: SCOPE_IDENTITY() returnerer den siste IDENTITY-verdien som ble satt inn i IDENTITY-kolonnen i samme omfang. Et scope er en modul – lagrede prosedyrer, triggere, funksjoner
Tall eller batcher. Derfor, hvis to setninger er i samme lagrede prosedyre, funksjon eller batch, er de i samme omfang. @@IDENTITY Returnerer den siste identifikasjonsverdien som ble generert i alle tabeller i den nåværende økten IDENT_CURRENT() returnerer den siste identifiseringsverdien som ble generert for den angitte tabellen i en hvilken som helst økt og ethvert omfang Her er et eksempel for å illustrere forskjellene deres
-- a) Eksempelkode -- =========================================== -- Opprett en testtabell -- =========================================== BRUK tempdb GÅ
CREATE TABLE t1(id int IDENTITY, col int) SETT INN t1 VELG 1 UNION ALLE VELG 2 CREATE TABLE t2(id int IDENTITY,col int) GÅ
OPPRETT TRIGGER TR_insert_t2 PÅ T2 FOR INSERT AS SETT INN t1 VELG 3 GÅ
-- =========================================== -- Test tre funksjoner: 1 -- =========================================== SETT INN T2-VERDIER(1) VELG [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')
/*--Resultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() For t1 IDENT_CURRENT() For t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Antall berørte rader er 1 rad) --*/ GÅ
-- =========================================== -- Test tre funksjoner: 2 -- =========================================== SETT INN T1-VERDIER(10) VELG [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')
/*--Resultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() For t1 IDENT_CURRENT() For t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Antall berørte rader er 1 rad) --*/ GÅ
-- =========================================== -- Test tre funksjoner: 3 -- ** Åpne en ny forbindelse og kjør følgende kode ** -- =========================================== VELG [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')
/*--Resultat SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() For t1 IDENT_CURRENT() For t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 &n
--=========================================== -- Slett testmiljøet -- =========================================== SLIPP TABELL t1,t2
-- b) Beskrivelse av koderesultater Som du kan se fra koden ovenfor: IDENT_CURRENT() returnerer alltid den siste identifiserte verdien som ble satt inn i den angitte tabellen @@IDENTITY Returnerer identitetsverdien til den nåværende økten, enten i samme omfang eller ikke, i tester 1 og 2, kan man se at den returnerer identitetsverdien til den innsatte posten i triggeren, og i
I Test 3 returneres NULL fordi det ikke finnes noen innsettingspost i den nåværende økten SCOPE_IDENTITY() returnerer identifikasjonsverdien for samme omfang som den nåværende økten, så i test 1, 2 returnerer den verdien som ikke påvirkes av triggeren, og i test 3, fordi den nåværende økten ikke interpoleres
post, så den returnerer NULL
|