Fonte: Internet Autore: Sconosciuto
- Creare database e tabelle
crea database MyDataBase
usa MyDataDatabase
crea tabella mytable
id int identità(1,1),
Nome Varchar(20)
)
--Esegui questo SQL per scoprire il valore della colonna auto-incrementale corrispondente al record appena inserito
inserire in valori mytable ('Li Si')
seleziona @@identity
2. Confronto tra i tre metodi
In SQL Server 2000, ci sono tre caratteristiche simili: SCOPE_IDENTITY, IDENT_CURRENT e @@IDENTITY, tutte restituendo valori inseriti nella colonna IDENTITY.
IDENT_CURRENT restituisce l'ultimo valore di identificazione generato per una tabella specifica in qualsiasi sessione e in qualsiasi ambito. IDENT_CURRENT Non limitato dall'ambito e dalla sessione, ma da una tabella specificata. IDENT_CURRENT restituisce il valore generato per una tabella specifica in qualsiasi sessione e ambito.
@@IDENTITY restituisce l'ultimo valore di identificazione generato per qualsiasi tabella in tutti gli ambiti della sessione corrente.
SCOPE_IDENTITY restituisce l'ultimo valore identificato generato per la sessione corrente e qualsiasi tabella nell'ambito corrente
SCOPE_IDENTITY e @@IDENTITY restituiscono l'ultimo valore di identificazione generato all'interno di qualsiasi tabella nella sessione corrente. Tuttavia, SCOPE_IDENTITY restituisce solo i valori inseriti nell'ambito corrente; @@IDENTITY Non limitato a un ambito specifico.
Ad esempio, ci sono due tabelle, T1 e T2, su cui è definito un trigger INSERT. Quando una riga viene inserita in T1, il grilletto viene attivato e una riga viene inserita in T2. Questo esempio illustra due ambitivi: uno su T1 e uno su T2 a seguito del trigger.
Assumendo che sia T1 che T2 abbiano colonne IDENTITY, @@IDENTITY e SCOPE_IDENTITY restituiranno valori diversi alla fine dell'istruzione INSERT su T1.
@@IDENTITY restituisce l'ultimo valore della colonna IDENTITY inserito in qualsiasi ambito della sessione corrente, che è il valore inserito in T2.
SCOPE_IDENTITY() restituisce il valore IDENTITY inserito in T1, che è l'ultimo INSERT avvenuto nello stesso ambito. Se la funzione SCOPE_IDENTITY() viene chiamata prima che l'istruzione di inserimento alla colonna identità avvenga nell'ambito, la funzione restituisce un valore NULL.
I valori restituiti da IDENT_CURRENT('T1') e IDENT_CURRENT('T2') sono rispettivamente gli ultimi valori auto-incrementali delle due tabelle.
Esperimento di AJQC: (40 thread locali, 40+40 thread remoti test simultaneamente concorrente, inserimento di righe da 1200W), la conclusione è:
1. Nelle tipiche applicazioni a cascata. @@IDENTITY non possono essere usati e si verificano conflitti contemporanei quando 1W è multi-riga su macchine CII850 e 256M SD. Su P42.8C e 512M DDR, c'è un conflitto simultaneo quando ci sono solo più di 6000 linee.
2.SCOPE_IDENTITY() è assolutamente affidabile e può essere utilizzato nel processo di archiviazione, anche i trigger non devono essere costruiti e non ci sono conflitti concorrenti
SELECT IDENT_CURRENT('TableName') - Restituisce l'ultimo valore dell'etichetta generato nella tabella specificata
SELECT IDENT_INCR('TableName') - restituisce il valore di incremento del campo segnato per la tabella specificata
SELECT IDENT_SEED('TableName') - restituisce il valore del seed del campo marcato della tabella specificata
Restituisce il numero automatico dell'ultimo record inserito
SELECT IDENT_CURRENT('NomeTabella')
Torna al numero automatico successivo:
SELEZIONA IDENT_CURRENT('NomeTabella)+(SELEZIONA IDENT_INCR('NomeTabella'))
SELECT @@IDENTITY - Restituisce l'ultimo valore marcato generato in tutte le tabelle della sessione corrente
|