DBCC CHECKIDENT (Transact-SQL)

Data aggiornamento: 17 novembre 2008

Verifica il valore Identity corrente per la tabella specificata e, se necessario, lo 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
    Valore da utilizzare come valore corrente della colonna Identity.
  • WITH NO_INFOMSGS
    Disattiva tutti i messaggi informativi.

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.

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 con il valore di incremento dove il valore Identity corrente è l'ultimo valore Identity generato per la tabella o la vista. Per ulteriori informazioni, vedere Creazione e modifica di colonne identificatore.

È possibile utilizzare DBCC CHECKIDENT per eseguire le attività seguenti:

  • Modificare il valore di inizializzazione originale che è stato specificato per una colonna Identity quando è stata creata la tabella o la vista.
  • Inizializzare nuovamente le righe esistenti in una tabella o in una vista.

Per modificare il valore di inizializzazione originale e inizializzare nuovamente le righe esistenti, è necessario eliminare e ricreare la colonna Identity specificando il nuovo valore di inizializzazione. Quando la tabella contiene dati, alle righe esistenti vengono aggiunti valori Identity con i valori di inizializzazione e di incremento specificati. L'ordine in cui vengono aggiornate le righe non è garantito.

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 )

Oppure

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.

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 sono state rimosse tutte le righe tramite 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 e quindi specificarlo come new_reseed_value in un comando DBCC CHECKIDENT (table_name, RESEED,new_reseed_value).

Oppure

  • Eseguire DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) con new_reseed_value impostato su un valore molto basso e 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.

Autorizzazioni

Il chiamante deve essere proprietario della tabella o membro del ruolo predefinito del server sysadmin o dei ruoli predefiniti 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 Employee nel database AdventureWorks.

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee");
GO

B. Visualizzazione del valore Identity corrente

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

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", NORESEED);
GO

C. Imposizione di un valore Identity 30

Nell'esempio seguente, viene impostato 300 quale valore Identity corrente nella colonna EmployeeID della tabella Employee. Dal momento che la tabella già contiene righe, la successiva riga inserita avrà il valore 301, ossia il valore Identity corrente incrementato di 1, il valore di incremento definito per la colonna.

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 30);
GO

Vedere anche

Riferimento

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)
IDENTITY (proprietà) (Transact-SQL)
USE (Transact-SQL)

Altre risorse

Replica di colonne Identity

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

17 novembre 2008

Contenuto modificato:
  • Correzione della definizione di new_reseed_value.
  • Aggiunta nella sezione Osservazioni di un paragrafo sulla modifica del valore di inizializzazione.

14 aprile 2006

Nuovo contenuto:
  • Aggiunta del testo relativo alle conseguenze dell'impostazione di un valore Identity su un numero inferiore al valore massimo della colonna Identity.
  • Aggiunta di testo alla sezione Eccezioni per la condizione relativa all'eliminazione di tutte le colonne dalla tabella.

5 dicembre 2005

Nuovo contenuto:
  • Aggiunta di testo alla descrizione dell'argomento new_reseed_value.