Sursa: Internet Autor: Necunoscut
- Crearea bazelor de date și tabele
creează baza de date MyDataBase
folosește MyDataBase
creează tabelă, mytable
id int identitate(1,1),
numele Varchar(20)
)
--Executați acest SQL pentru a afla valoarea coloanei auto-incrementale corespunzătoare recordului care tocmai a fost inserat
inserați în valorile mytable ('Li Si')
selectează @@identity
2. Comparația celor trei metode
În SQL Server 2000, există trei caracteristici similare: SCOPE_IDENTITY, IDENT_CURRENT și @@IDENTITY, toate returnând valori inserate în coloana IDENTITY.
IDENT_CURRENT returnează ultima valoare de identificare generată pentru un anumit tabel în orice sesiune și orice scop. IDENT_CURRENT Nu este limitat de scop și sesiune, ci de un tabel specificat. IDENT_CURRENT returnează valoarea generată pentru un anumit tabel în orice sesiune și domeniu.
@@IDENTITY returnează ultima valoare de identificare generată pentru orice tabel în toate domeniile sesiunii curente.
SCOPE_IDENTITY returnează ultima valoare identificată generată pentru sesiunea curentă și orice tabel din domeniul curent
SCOPE_IDENTITY și @@IDENTITY returnează ultima valoare de identificare generată în orice tabel din sesiunea curentă. Totuși, SCOPE_IDENTITY returnează doar valorile introduse în domeniul curent; @@IDENTITY Nu este limitat la un anumit domeniu.
De exemplu, există două tabele, T1 și T2, pe care este definit un trigger INSERT. Când un rând este introdus în T1, declanșatorul este declanșat, iar un rând este introdus în T2. Acest exemplu ilustrează două lunete: unul pe T1 și unul pe T2 ca urmare a declanșatorului.
Presupunând că atât T1, cât și T2 au coloane IDENTITY, @@IDENTITY și SCOPE_IDENTITY vor returna valori diferite la finalul instrucțiunii INSERT pe T1.
@@IDENTITY returnează ultima valoare a coloanei IDENTITY introdusă în orice domeniu în sesiunea curentă, care este valoarea introdusă în T2.
SCOPE_IDENTITY() returnează valoarea IDENTITY introdusă în T1, care este ultimul INSERT care a avut loc în același scop. Dacă funcția SCOPE_IDENTITY() este apelată înainte ca instrucțiunea de inserare în coloana de identitate să aibă loc în domeniu, funcția returnează o valoare NULĂ.
Valorile returnate de IDENT_CURRENT('T1') și IDENT_CURRENT('T2') sunt ultimele valori auto-incrementale ale celor două tabele, respectiv.
Experimentul AJQC: (40 de fire locale, 40+40 fire de execuție la distanță simultan, testare simultană, inserarea de rânduri de 1200W), concluzia este:
1. În aplicațiile tipice în cascadă. @@IDENTITY nu pot fi folosite, iar conflictele simultane vor apărea atunci când 1W este pe mai multe rânduri pe mașini CII850, 256M SD. Pe P42.8C și 512M DDR, există un conflict simultan când există doar peste 6000 de linii.
2.SCOPE_IDENTITY() este absolut fiabil și poate fi folosit în procesul de stocare, chiar și trigger-urile nu trebuie construite și nu există conflicte simultane
SELECT IDENT_CURRENT('TableName') - returnează ultima valoare de etichetă generată în tabelul specificat
SELECT IDENT_INCR('TableName') - returnează valoarea de increment a câmpului marcat pentru tabelul specificat
SELECT IDENT_SEED('TableName') - returnează valoarea seed-ului câmpului marcat din tabelul specificat
Returnează numărul automat al ultimei înregistrări inserate
SELECT IDENT_CURRENT('NumeTabel')
Întoarce-te la următorul număr automat:
SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY - Returnează ultima valoare marcată care a fost generată în toate tabelele din sesiunea curentă
|