Zdroj: Internet Autor: Neznámy
- Vytváranie databáz a tabuliek
vytvoriť databázu MyDataBase
použite MyDataBase
Vytvorte tabuľku v Mytable
id int identity(1,1),
Meno Varchar(20)
)
--Vykonajte toto SQL, aby ste zistili hodnotu samoinkrementálneho stĺpca zodpovedajúceho práve vloženému záznamu
vložiť do mytable hodnôt ('Li Si')
Vyberte @@identity
2. Porovnanie troch metód
V SQL Server 2000 existujú tri podobné funkcie: SCOPE_IDENTITY, IDENT_CURRENT a @@IDENTITY, ktoré všetky vracajú hodnoty vložené do stĺpca IDENTITY.
IDENT_CURRENT Vráti poslednú identifikačnú hodnotu generovanú pre konkrétnu tabuľku v akejkoľvek relácii a v akomkoľvek rozsahu. IDENT_CURRENT Nie je obmedzený rozsahom a reláciou, ale špecifikovanou tabuľkou. IDENT_CURRENT Vráti hodnotu generovanú pre konkrétnu tabuľku v ľubovoľnej relácii a rozsahu.
@@IDENTITY Vráti poslednú identifikačnú hodnotu generovanú pre akúkoľvek tabuľku vo všetkých rozsahoch aktuálnej relácie.
SCOPE_IDENTITY Vráti poslednú identifikovanú hodnotu, ktorá bola vygenerovaná pre aktuálnu reláciu, a akúkoľvek tabuľku v aktuálnom rozsahu
SCOPE_IDENTITY a @@IDENTITY vracajú poslednú identifikačnú hodnotu, ktorá bola vygenerovaná v akejkoľvek tabuľke v aktuálnej relácii. Avšak SCOPE_IDENTITY vracia iba hodnoty vložené do aktuálneho rozsahu; @@IDENTITY Nie je obmedzený na konkrétny rozsah.
Napríklad existujú dve tabuľky, T1 a T2, na ktorých je definovaný spúšťač INSERT. Keď sa riadok vloží do T1, trigger sa spustí a riadok sa vloží do T2. Tento príklad ilustruje dva zameriavače: jeden na T1 a druhý na T2 v dôsledku spúšťača.
Za predpokladu, že T1 aj T2 majú stĺpce IDENTITY, @@IDENTITY a SCOPE_IDENTITY vrátia na konci príkazu INSERT na T1 rôzne hodnoty.
@@IDENTITY Vráti poslednú hodnotu stĺpca IDENTITY vloženú do akéhokoľvek rozsahu v aktuálnej relácii, čo je hodnota vložená v T2.
SCOPE_IDENTITY() vráti hodnotu IDENTITY vloženú v T1, čo je posledné INSERT, ktoré sa stalo v rovnakom rozsahu. Ak je funkcia SCOPE_IDENTITY() zavolaná predtým, než sa príkaz insertion do identity stĺpca objaví v scope, funkcia vráti hodnotu NULL.
Hodnoty vrátené IDENT_CURRENT('T1') a IDENT_CURRENT('T2') sú posledné samoinkrementálne hodnoty týchto dvoch tabuliek.
Experiment ajqc: (40 lokálnych vlákien, 40+40 vzdialených vlákien súčasne testuje, vkladá 1200W riadok), záver je:
1. V typických kaskádových aplikáciách. @@IDENTITY nie je možné použiť a súbežné konflikty nastanú, keď je 1W viacriadkové na počítačoch CII850, 256M SD. Na P42.8C a 512M DDR dochádza k súbežnému konfliktu, keď je len viac ako 6000 riadkov.
2.SCOPE_IDENTITY() je absolútne spoľahlivý a dá sa použiť v procese ukladania, dokonca ani spúšťače nie je potrebné vytvárať a neexistujú žiadne súbežné konflikty
SELECT IDENT_CURRENT('TableName') - Vráti poslednú hodnotu štítku generovanú v zadanej tabuľke
SELECT IDENT_INCR('TableName') - vráti označenú hodnotu inkrementu poľa pre zadanú tabuľku
SELECT IDENT_SEED('TableName') - vráti označenú počiatočnú hodnotu poľa pre zadanú tabuľku
Automaticky vráti číslo posledného vloženého záznamu
VYBERTE IDENT_CURRENT('TableName')
Návrat k ďalšiemu automatickému číslu:
SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY - Vráti poslednú označenú hodnotu, ktorá bola vygenerovaná vo všetkých tabuľkách v aktuálnej relácii
|