Källa: Internet Författare: Okänd
- Skapa databaser och tabeller
skapa databas MyDataBase
använd MyDataBase
skapa tabell mytable
id int identitet(1,1),
Namn Varchar(20)
)
--Exekvera denna SQL för att ta reda på värdet på den självinkrementella kolumnen som motsvarar posten som just har lagts in
infoga i mytable-värden('Li Si')
Välj @@identity
2. Jämförelse av de tre metoderna
I SQL Server 2000 finns tre liknande funktioner: SCOPE_IDENTITY, IDENT_CURRENT och @@IDENTITY, som alla returnerar värden som infogas i IDENTITY-kolumnen.
IDENT_CURRENT Returnerar det senaste identifieringsvärdet som genererats för en specifik tabell i varje session och varje omfattning. IDENT_CURRENT Inte begränsat av omfattning och session, utan av en specificerad tabell. IDENT_CURRENT Returnerar värdet som genererats för en specifik tabell i varje session och omfattning.
@@IDENTITY Returnerar det senaste identifieringsvärdet som genererats för någon tabell i alla scopes av den aktuella sessionen.
SCOPE_IDENTITY Returnerar det senast identifierade värdet som genererades för den aktuella sessionen och varje tabell i det aktuella omfånget
SCOPE_IDENTITY och @@IDENTITY returnerar det senaste identifieringsvärdet som genererades i någon tabell under den aktuella sessionen. Dock returnerar SCOPE_IDENTITY endast värden som infogas i den aktuella omfattningen; @@IDENTITY Inte begränsat till ett specifikt omfängelse.
Till exempel finns det två tabeller, T1 och T2, där en INSERT-trigger är definierad. När en rad sätts in i T1 triggas triggern och en rad sätts in i T2. Detta exempel illustrerar två scopes: ett på T1 och ett på T2 som ett resultat av triggern.
Om både T1 och T2 har IDENTITY-kolumner, kommer @@IDENTITY och SCOPE_IDENTITY att returnera olika värden i slutet av INSERT-satsen på T1.
@@IDENTITY Returnerar det senaste IDENTITY-kolumnvärdet som infogades i någon scope i den aktuella sessionen, vilket är värdet som satts in i T2.
SCOPE_IDENTITY() returnerar IDENTITY-värdet som infogades i T1, vilket är det senaste INSERT som inträffade i samma scope. Om funktionen SCOPE_IDENTITY() anropas innan insättningssatsen i identitetskolumnen sker i scope, returnerar funktionen ett NULL-värde.
Värdena som returneras av IDENT_CURRENT('T1') och IDENT_CURRENT('T2') är de sista självinkrementella värdena i de två tabellerna.
ajqc:s experiment: (40 lokala trådar, 40+40 fjärrtrådar samtidigt test, insättning av 1200W-rader), slutsatsen är:
1. I typiska kaskadapplikationer. @@IDENTITY kan inte användas, och samtidiga konflikter uppstår när 1W är flerradigt på CII850, 256M SD-maskiner. På P42.8C och 512M DDR finns en parallell konflikt när det bara finns mer än 6000 linjer.
2.SCOPE_IDENTITY() är absolut pålitlig och kan användas i lagringsprocessen, även triggers behöver inte byggas, och det finns inga samtidiga konflikter
SELECT IDENT_CURRENT('TableName') - Returnerar det senaste etikettvärdet som genererats i den angivna tabellen
SELECT IDENT_INCR('TableName') – returnerar det markerade fältinkrementvärdet för den angivna tabellen
SELECT IDENT_SEED('TableName') - returnerar det markerade fältfrövärdet för den angivna tabellen
Returnerar det automatiska numret för den senast insatta posten
VÄLJ IDENT_CURRENT('TableName')
Återgå till nästa automatiska nummer:
VÄLJ IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY - Returnerar det senast markerade värdet som genererades i alla tabeller i den aktuella sessionen
|