Kilde: Internett Forfatter: Ukjent
- Opprette databaser og tabeller
opprett database MyDataBase
bruk MyDataBase
Opprett tabell mytable
id int identity(1,1),
Navn Varchar(20)
)
--Kjør denne SQL-en for å finne verdien til den selvinkrementelle kolonnen som tilsvarer posten som nettopp er satt inn
sett inn i mytable-verdier ('Li Si')
velg @@identity
2. Sammenligning av de tre metodene
I SQL Server 2000 finnes det tre lignende funksjoner: SCOPE_IDENTITY, IDENT_CURRENT og @@IDENTITY, som alle returnerer verdier satt inn i IDENTITY-kolonnen.
IDENT_CURRENT Returnerer den siste identifikasjonsverdien generert for en spesifikk tabell i en hvilken som helst økt og ethvert omfang. IDENT_CURRENT Ikke begrenset av omfang og sesjon, men av en spesifisert tabell. IDENT_CURRENT Returnerer verdien generert for en spesifikk tabell i en hvilken som helst økt og omfang.
@@IDENTITY Returnerer den siste identifiseringsverdien generert for en hvilken som helst tabell i alle omfang av den nåværende økten.
SCOPE_IDENTITY Returnerer den siste identifiserte verdien som ble generert for den nåværende sesjonen og enhver tabell i gjeldende omfang
SCOPE_IDENTITY og @@IDENTITY returnerer den siste identifikasjonsverdien som ble generert i en hvilken som helst tabell i den nåværende økten. Men SCOPE_IDENTITY returnerer kun verdier satt inn i det nåværende omfanget; @@IDENTITY Ikke begrenset til et spesifikt omfang.
For eksempel finnes det to tabeller, T1 og T2, hvor en INSERT-trigger er definert. Når en rad settes inn i T1, utløses triggeren og en rad settes inn i T2. Dette eksempelet illustrerer to teleskoper: ett på T1 og ett på T2 som følge av triggeren.
Forutsatt at både T1 og T2 har IDENTITY-kolonner, vil @@IDENTITY og SCOPE_IDENTITY returnere forskjellige verdier på slutten av INSERT-setningen på T1.
@@IDENTITY Returnerer den siste IDENTITY-kolonneverdien satt inn i et hvilket som helst omfang i den nåværende økten, som er verdien som er satt inn i T2.
SCOPE_IDENTITY() returnerer IDENTITY-verdien som ble satt inn i T1, som er den siste INSERT som forekom i samme omfang. Hvis SCOPE_IDENTITY()-funksjonen kalles før innsettingssetningen til identitetskolonnen skjer i omfang, returnerer funksjonen en NULL-verdi.
Verdiene som returneres av IDENT_CURRENT('T1') og IDENT_CURRENT('T2') er de siste selvinkrementelle verdiene i de to tabellene, henholdsvis.
ajqcs eksperiment: (40 lokale tråder, 40+40 eksterne tråder samtidig test, som setter inn 1200W rader), konklusjonen er:
1. I typiske kaskaderende applikasjoner. @@IDENTITY kan ikke brukes, og samtidige konflikter vil oppstå når 1W er flerradert på CII850, 256M SD-maskiner. På P42.8C og 512M DDR oppstår det en samtidig konflikt når det bare er mer enn 6000 linjer.
2.SCOPE_IDENTITY() er helt pålitelig og kan brukes i lagringsprosessen, selv triggere trenger ikke å bygges, og det er ingen samtidige konflikter
SELECT IDENT_CURRENT('TableName') - Returnerer den siste etikettverdien generert i den angitte tabellen
SELECT IDENT_INCR('TableName') - returnerer den markerte feltøkningsverdien for den angitte tabellen
SELECT IDENT_SEED('TableName') - returnerer den markerte feltfrøverdien til den angitte tabellen
Returnerer det automatiske nummeret til den siste innsatte posten
VELG IDENT_CURRENT('TableName')
Gå tilbake til neste automatiske nummer:
VELG IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY - Returnerer den siste markerte verdien som ble generert i alle tabeller i den nåværende økten
|