Allikas: Internet Autor: teadmata
- Luua andmebaase ja tabeleid
loo andmebaas MyDataBase
kasuta MyDataBase'i
loo tabel Mytable
id int identiteet(1,1),
Nimi Varchar(20)
)
--Käivita see SQL, et teada saada iseinkrementaalse veeru väärtus, mis vastab just sisestatud kirjele
sisesta Mytable'i väärtustesse ('Li Si')
vali @@identity
2. Kolme meetodi võrdlus
SQL Server 2000-s on kolm sarnast funktsiooni: SCOPE_IDENTITY, IDENT_CURRENT ja @@IDENTITY, mis kõik tagastavad väärtused, mis on lisatud IDENTITY veergu.
IDENT_CURRENT Tagastab viimase identifitseerimisväärtuse, mis genereeritakse konkreetse tabeli jaoks igas sessioonis ja mis tahes ulatuses. IDENT_CURRENT Ei ole piiratud ulatuse ja sessiooniga, vaid kindla tabeliga. IDENT_CURRENT Tagastab väärtuse, mis genereeritakse konkreetse tabeli jaoks igas sessioonis ja ulatuses.
@@IDENTITY Tagastab viimase identifitseerimisväärtuse, mis genereeritakse mis tahes tabeli jaoks kõigis käesoleva sessiooni ulatustes.
SCOPE_IDENTITY Tagastab viimati tuvastatud väärtuse, mis genereeriti praeguse sessiooni jaoks, ning mis tahes tabeli praeguses ulatuses
SCOPE_IDENTITY ja @@IDENTITY tagastavad viimase identifitseerimisväärtuse, mis genereeriti mis tahes tabelis käesoleval sessioonil. Kuid SCOPE_IDENTITY tagastab ainult väärtused, mis on sisestatud praegusesse ulatusse; @@IDENTITY Ei piirdu ainult kindla ulatusega.
Näiteks on kaks tabelit, T1 ja T2, kus on määratletud INSERT päästik. Kui rida lisatakse T1-sse, käivitatakse päästik ja rida lisatakse T2-sse. See näide illustreerib kahte sihikut: üht T1-l ja teist T2-l päästiku tulemusena.
Eeldades, et nii T1-l kui T2-l on IDENTITY-veergud, tagastavad @@IDENTITY ja SCOPE_IDENTITY INSERT-lause lõpus T1-l erinevad väärtused.
@@IDENTITY Tagastab viimase IDENTITY-veeru väärtuse, mis on sisestatud mis tahes ulatusse praeguses sessioonis, mis on T2-sse lisatud.
SCOPE_IDENTITY() tagastab IDENTITY väärtuse, mis on sisestatud T1-sse, mis on viimane INSERT, mis toimus samas ulatuses. Kui SCOPE_IDENTITY() funktsioon kutsutakse välja enne, kui identiteediveeru sisestuslause toimub ulatuses, tagastab funktsioon NULL väärtuse.
IDENT_CURRENT('T1') ja IDENT_CURRENT('T2') tagastatud väärtused on vastavalt kahe tabeli viimased iseinkrementaalsed väärtused.
ajqc eksperiment: (40 kohalikku lõime, 40+40 kauglõime samaaegne test, lisades 1200W rida), järeldus on:
1. Tüüpilistes kaskaadirakendustes. @@IDENTITY ei saa kasutada ning samaaegsed konfliktid tekivad, kui 1W on mitmerealine CII850, 256M SD masinatel. P42.8C ja 512M DDR puhul on samaaegne konflikt, kui liini on üle 6000.
2.SCOPE_IDENTITY() on täiesti usaldusväärne ja seda saab kasutada salvestusprotsessis, isegi päästikuid pole vaja ehitada ning paralleelseid konflikte ei teki
SELECT IDENT_CURRENT('TableName') - Tagastab määratud tabelis genereeritud viimase sildi väärtuse
SELECT IDENT_INCR('TableName') – tagastab määratud tabeli märgitud välja kasvu väärtuse
SELECT IDENT_SEED('TableName') – tagastab määratud tabeli märgitud välja seemne väärtuse
Tagastab viimase sisestatud kirje automaatse numbri
SELECT IDENT_CURRENT('TableName')
Naase järgmise automaatse numbri juurde:
SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY - Tagastab viimase märgitud väärtuse, mis genereeriti kõigis tabelites praeguses sessioonis
|