DBCC CHECKIDENT (Transact-SQL)

Viene verificato il valore Identity corrente per la tabella specificata in SQL Server 2008 R2 e, se necessario, ne consente la modifica. È inoltre possibile utilizzare DBCC CHECKIDENT per impostare manualmente un nuovo valore Identity corrente per la colonna Identity.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

DBCC CHECKIDENT 
 ( 
    table_name
        [, { NORESEED | { RESEED [,new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]

Argomenti

  • table_name
    Nome della tabella di cui verificare il valore Identity corrente. La tabella specificata deve includere una colonna Identity. I nomi delle tabelle devono essere conformi alle regole per gli identificatori.

  • NORESEED
    Specifica che non è necessario modificare il valore Identity corrente.

  • RESEED
    Specifica che è necessario modificare il valore Identity corrente.

  • new_reseed_value
    Nuovo valore da utilizzare come valore corrente della colonna Identity.

  • WITH NO_INFOMSGS
    Disattiva tutti i messaggi informativi.

Osservazioni

Le correzioni specifiche apportate al valore Identity corrente dipendono dalle specifiche di parametro.

Comando DBCC CHECKIDENT

Correzione o correzioni Identity apportate

DBCC CHECKIDENT ( table_name, NORESEED )

Il valore Identity corrente non viene reimpostato. DBCC CHECKIDENT restituisce il valore Identity corrente e il valore massimo corrente della colonna Identity. Se i due valori non corrispondono, è consigliabile reimpostare il valore Identity per evitare potenziali errori o gap nella sequenza dei valori.

DBCC CHECKIDENT (table_name)

o

DBCC CHECKIDENT ( table_name, RESEED )

Se il valore Identity corrente di una tabella è inferiore al valore Identity massimo archiviato nella colonna Identity, questo viene reimpostato in base al valore massimo della colonna Identity. Consultare la sezione relative alle eccezioni riportata di seguito.

DBCC CHECKIDENT (table_name, RESEED, new_reseed_value)

Il valore Identity corrente viene impostato come new_reseed_value. Se dopo la creazione della tabella non è stata inserita alcuna riga o se tutte le righe sono state rimosse mediante l'istruzione TRUNCATE TABLE, per la prima riga inserita dopo l'esecuzione di DBCC CHECKIDENT viene utilizzato il valore new_reseed_value come valore Identity. In caso contrario, per la successiva riga inserita viene utilizzato il valore new_reseed_value + il valore di incremento corrente.

Se la tabella non è vuota, l'impostazione del valore Identity su un numero inferiore al valore massimo della colonna Identity può determinare una delle condizioni seguenti:

  • Se esiste un vincolo PRIMARY KEY o UNIQUE nella colonna Identity, verrà generato il messaggio di errore 2627 per le successive operazioni di inserimento nella tabella poiché il valore Identity generato è in conflitto con i valori esistenti.

  • Se non esiste un vincolo PRIMARY KEY o UNIQUE, le successive operazioni di inserimento causeranno valori Identity duplicati.

Eccezioni

Nella tabella seguente vengono elencate le condizioni in cui DBCC CHECKIDENT non reimposta automaticamente il valore Identity corrente e vengono specificati i metodi per la reimpostazione del valore.

Condizione

Metodi di reimpostazione

Il valore Identity corrente è maggiore del valore massimo della tabella.

  • Eseguire DBCC CHECKIDENT (table_name, NORESEED) per determinare il valore massimo corrente della colonna, quindi specificare tale valore come parametro new_reseed_value in un comando DBCC CHECKIDENT (table_name, RESEED,new_reseed_value).

o

  • Eseguire DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) con new_reseed_value impostato su un valore molto basso, quindi eseguire DBCC CHECKIDENT (table_name, RESEED) per correggere il valore.

Tutte le righe sono state eliminate dalla tabella.

Eseguire DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) con new_reseed_value impostato sul valore iniziale desiderato.

Modifica del valore di inizializzazione

Il valore di inizializzazione è il valore inserito in una colonna Identity per la prima riga caricata nella tabella. Tutte le righe successive contengono il valore Identity corrente più il valore dell'incremento dove il valore Identity corrente è l'ultimo valore Identity generato per la tabella o vista. Per ulteriori informazioni, vedere Creazione e modifica di colonne identificatore.

Non è possibile utilizzare DBCC CHECKIDENT per eseguire le attività seguenti:

  • Modificare il valore di inizializzazione originale specificato per una colonna Identity al momento della creazione della tabella o vista.

  • Reinizializzare righe esistenti in una tabella o vista.

Per modificare il valore di inizializzazione originale e reinizializzare le eventuali righe esistenti, è necessario eliminare la colonna Identity e ricrearla specificando il nuovo valore di inizializzazione. Quando la tabella contiene dati, i numeri di identità vengono aggiunti alle righe esistenti con i valori di inizializzazione e incremento specificati. L'ordine con cui le righe vengono aggiornate non è prevedibile.

Set di risultati

Indipendentemente dalla specifica delle opzioni per una tabella che include una colonna Identity, DBCC CHECKIDENT restituisce il set di risultati seguente (i valori possono variare):

Checking identity information: current identity value '290', current column value '290'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Autorizzazioni

Il chiamante deve essere proprietario della tabella o membro del ruolo predefinito del server sysadmin o del ruolo predefinito del database db_owner e db_ddladmin.

Esempi

A. Reimpostazione del valore Identity corrente, se necessario

Nell'esempio seguente viene reimpostato il valore Identity corrente, se necessario, per la tabella AddressType nel database AdventureWorks2008R2.

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType");
GO

B. Visualizzazione del valore Identity corrente

Nell'esempio seguente viene visualizzato il valore Identity della tabella AddressType nel database AdventureWorks2008R2 e, se è errato, non viene corretto.

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType", NORESEED);
GO

C. Imposizione del valore Identity corrente su un nuovo valore

Nell'esempio seguente il valore Identity corrente viene della colonna AddressTypeID nella tabella AddressType viene impostato su 10. Poiché nella tabella sono presenti righe, nella successiva riga inserita sarà utilizzato il valore 11, ovvero il valore Identity corrente più 1, che rappresenta il valore dell'incremento corrente definito per la colonna.

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType", RESEED, 10);
GO