Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 12386|Risposta: 0

[Fonte] SqlServer implementa l'ID del nuovo record inserito

[Copiato link]
Pubblicato su 15/06/2016 11:45:40 | | |

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








Precedente:SQLServer implementa il metodo universale di divisione delle stringhe
Prossimo:Condividi un artefatto di ricerca utile
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com