La proprietà identity su una colonna non garantisce quanto segue :
Unicità del valore – L'unicità deve essere applicata utilizzando una CHIAVE PRIMARIA o un vincolo UNIQUE o un indice UNIQUE.
Valori consecutivi all'interno di una transazione – Non è garantito che una transazione che inserisce più righe ottenga valori consecutivi per le righe poiché nella tabella potrebbero verificarsi altri inserimenti simultanei. Se i valori devono essere consecutivi, la transazione deve utilizzare un blocco esclusivo sulla tabella o utilizzare il livello di isolamento SERIALIZABLE.
Valori consecutivi dopo il riavvio del server o altri errori –SQL Server potrebbe memorizzare nella cache i valori di identità per motivi di prestazioni e alcuni dei valori assegnati possono andare persi durante un errore del database o il riavvio del server. Ciò può causare lacune nel valore di identità al momento dell'inserimento. Se le lacune non sono accettabili, l'applicazione deve utilizzare un generatore di sequenze con l'opzione NOCACHE o utilizzare il proprio meccanismo per generare valori chiave.
Riutilizzo dei valori – Per una determinata proprietà di identità con seme/incremento specifico, i valori di identità non vengono riutilizzati dal motore. Se una particolare istruzione di inserimento non riesce o se viene eseguito il rollback dell'istruzione di inserimento, i valori di identità consumati vengono persi e non verranno generati nuovamente. Ciò può causare lacune quando vengono generati i successivi valori di identità.
Inoltre,
Se esiste una colonna di identità per una tabella con eliminazioni frequenti, possono verificarsi degli intervalli tra i valori di identità. Se questo è un problema, non utilizzare la proprietà IDENTITY. Tuttavia, per assicurarti che non siano state create lacune o per colmare una lacuna esistente , valutare i valori di identità esistenti prima di inserirne uno esplicitamente con SET IDENTITY_INSERT ON
.
Inoltre, controlla le proprietà della colonna identità e controlla il valore Incremento identità. Dovrebbe essere 1.