Šaltinis: Internetas Autorius: Nežinomas
- Kurti duomenų bazes ir lenteles
sukurti duomenų bazę MyDataBase
naudoti "MyDataBase"
Kurti lentelę MyTable
id int tapatybė(1,1),
Vardas Varchar(20)
)
--Vykdykite šį SQL, kad sužinotumėte savaiminio inaugalinio stulpelio reikšmę, atitinkančią ką tik įterptą įrašą
įterpti į mytable reikšmes('Li Si')
Pasirinkite @@identity
2. Trijų metodų palyginimas
SQL Server 2000 yra trys panašios funkcijos: SCOPE_IDENTITY, IDENT_CURRENT ir @@IDENTITY, kurios visos grąžina reikšmes, įterptas į stulpelį IDENTITY.
IDENT_CURRENT Pateikia paskutinę identifikavimo reikšmę, sugeneruotą konkrečiai lentelei bet kuriame seanse ir bet kokioje aprėptyje. IDENT_CURRENT Neribojama aprėptimi ir seansu, bet nurodyta lentele. IDENT_CURRENT Pateikia konkrečios lentelės reikšmę, sugeneruotą bet kuriame seanse ir aprėptyje.
@@IDENTITY Pateikia paskutinę identifikavimo reikšmę, sugeneruotą bet kuriai lentelei visose dabartinio seanso aprėptyse.
SCOPE_IDENTITY Pateikia paskutinę identifikuotą reikšmę, kuri buvo sugeneruota dabartiniam seansui ir bet kuriai dabartinės aprėpties lentelei
SCOPE_IDENTITY ir @@IDENTITY pateikia paskutinę identifikavimo reikšmę, kuri buvo sugeneruota bet kurioje dabartinio seanso lentelėje. Tačiau SCOPE_IDENTITY grąžina tik reikšmes, įterptas į dabartinę aprėptį; @@IDENTITY Neapsiriboja konkrečia taikymo sritimi.
Pavyzdžiui, yra dvi lentelės, T1 ir T2, kuriose apibrėžiamas INSERT paleidiklis. Kai eilutė įterpiama į T1, suveikia gaidukas ir eilutė įterpiama į T2. Šis pavyzdys iliustruoja dvi taikymo sritis: vieną T1 ir kitą T2 dėl trigerio.
Darant prielaidą, kad T1 ir T2 turi IDENTITY stulpelius, @@IDENTITY ir SCOPE_IDENTITY pateiks skirtingas reikšmes T1 sakinio INSERT pabaigoje.
@@IDENTITY Pateikia paskutinę stulpelio IDENTITY reikšmę, įterptą į bet kurią dabartinio seanso aprėptį, kuri yra T2 įterpta reikšmė.
SCOPE_IDENTITY() grąžina IDENTITY reikšmę, įterptą į T1, kuri yra paskutinė INSERT, įvykusi toje pačioje aprėptyje. Jei funkcija SCOPE_IDENTITY() iškviečiama prieš įterpimo sakinį į tapatybės stulpelį aprėptyje, funkcija grąžina NULL reikšmę.
IDENT_CURRENT('T1') ir IDENT_CURRENT('T2') grąžinamos reikšmės yra atitinkamai paskutinės savaiminės abiejų lentelių vertės.
ajqc eksperimentas: (40 vietinių gijų, 40+40 nuotolinių gijų vienu metu vienu metu testas, įterpiant 1200 W eilutes), išvada yra tokia:
1. Tipinėse pakopinėse programose. @@IDENTITY negalima naudoti, o vienu metu kils konfliktų, kai CII850, 256M SD mašinose 1 W yra kelių eilučių. P42.8C ir 512M DDR vienu metu vyksta konfliktas, kai yra tik daugiau nei 6000 linijų.
2.SCOPE_IDENTITY() yra absoliučiai patikimas ir gali būti naudojamas saugojimo procese, net trigerių nereikia statyti, ir nėra lygiagrečių konfliktų
SELECT IDENT_CURRENT('TableName') – pateikia paskutinę etiketės reikšmę, sugeneruotą nurodytoje lentelėje
SELECT IDENT_INCR('TableName') – grąžina pažymėtą nurodytos lentelės lauko prieaugio reikšmę
SELECT IDENT_SEED('TableName') - grąžina pažymėtą nurodytos lentelės lauko pradinę reikšmę
Grąžina automatinį paskutinio įterpto įrašo numerį
SELECT IDENT_CURRENT('TableName')
Grįžti į kitą automatinį numerį:
SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY – pateikia paskutinę pažymėtą reikšmę, kuri buvo sugeneruota visose dabartinio seanso lentelėse
|