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

SQL Server garantisce l'inserimento sequenziale di una colonna di identità?

Garantito in quanto in nessun caso si potrebbe mai ottenere un valore inferiore o uguale al valore massimo attuale? No, non esiste tale garanzia. Detto questo, le circostanze in cui tale scenario potrebbe verificarsi sono limitate:

  1. Qualcuno disabilita l'inserimento dell'identità e inserisce un valore.
  2. Qualcuno ripristina la colonna dell'identità.
  3. Qualcuno cambia il segno del valore di incremento (cioè invece di +1 viene cambiato in -1)

Supponendo che nessuna di queste circostanze sia al sicuro da condizioni di gara che creano una situazione in cui il valore successivo è inferiore a un valore esistente. Detto questo, non vi è alcuna garanzia che le righe saranno impegnate nell'ordine dei loro valori identitari. Ad esempio:

  1. Apri una transazione, inserisci nella tua tabella una colonna identità. Diciamo che ottiene il valore 42.
  2. Inserisci e conferma nella stessa tabella un altro valore. Diciamo che ottiene il valore 43.

Fino al commit della prima transazione, 43 esiste ma 42 no. La colonna identity sta semplicemente riservando un valore, non sta dettando l'ordine dei commit.