Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

In che modo SQL Server genera valori in una colonna Identity?

Stai facendo l'errore comune di assumere un ordine nella tabella. I tavoli non hanno ordine. Solo i risultati hanno un ordine, che è indeterminato a meno che non sia specificato un ORDER BY esplicito.

Potresti porre una domanda diversa:come viene assegnato il valore generato dall'identità in caso di inserimenti simultanei? La risposta è semplice:non importa . E se fai supposizioni sull'ordine, il tuo codice è rotto. Lo stesso vale per le lacune. La tua applicazione dovrebbe funzionare anche se le identità generate sono completamente casuali e l'applicazione scritta correttamente funzionerà funziona se l'identità è completamente casuale. Usa SCOPE_IDENTITY() per recuperare l'ultima identità inserita. Meglio ancora, usa OUTPUT clausola di INSERT , funziona anche con inserti multiriga.

Per la cronaca:le identità vengono generate nell'ordine in cui le operazioni acquisiscono l'accesso a flusso di registro .