Mi è capitato di recente di modificare una tabella di SQL Server 2008 R2 in cui c'era una colonna identity.
La modifica consisteva nell'aggiungere dei campi in mezzo ad altri esistenti. Dopo la modifica la tabella era correttamente modificata ma... la colonna identity era stata resettata.

In pratica nella tabella avevo inserito parecchie righe e l'identity era arrivata a circa 33000. I record nella tabella venivano poi spostati in una tabella di storico. Al momento della modifica la tabella era vuota e dopo la modifica l'identity aveva ripreso dal valore 1.
Lo stesso problema si presenta anche con una tabella contenente dei dati dove gli ultimi record sono stati cancellati, l'identity viene reimpostato al valore massimo presente nella colonna al momento della modifica.

Questo perché la tabella viene distrutta e poi ricreata con la nuova struttura, ma non viene recuperato il valore dell'identity.

In questa situazione l'unica cosa che si può fare è reimpostare l'identity al valore corretto.
Ad esempio per reimpostare il valore dell'identity a 33000 della tabella downloads:

SQL

DBCC CHECKIDENT (downloads, RESEED, 33000)
in questo caso il prossimo valore sarà 33001.

Per vedere qual'è il valore attuale dell'identity:

SQL

DBCC CHECKIDENT (downloads, NORESEED)
che da un risultato simile a questo

Text

Checking identity information: current identity value '5', current column value '5'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Tags:
Database75 Errori120 SQL90 SQL Server100 T-SQL66
Potrebbe interessarti anche: