DBCC CHECKIDENT (Transact-SQL)

Si applica a:yes SQL Server (tutte le versioni supportate) Yesdatabase SQL di Azure YesIstanza gestita di SQL di Azure yesAzure Synapse Analytics

Controlla il valore Identity corrente per la tabella specificata in SQL Server 2019 (15.x) e, se necessario, modifica il valore Identity. È inoltre possibile utilizzare DBCC CHECKIDENT per impostare manualmente un nuovo valore Identity corrente per la colonna Identity.

Article link iconConvenzioni della sintassi transact-SQL

Sintassi

-- Syntax for SQL Server and Azure SQL Database  

DBCC CHECKIDENT
 (
    table_name  
        [, { NORESEED | { RESEED [, new_reseed_value ] } } ]  
)  
[ WITH NO_INFOMSGS ]  
-- Syntax for Azure Synapse Analytics
DBCC CHECKIDENT   
 (   
    table_name  
        [RESEED, new_reseed_value ]   
)  
[ WITH NO_INFOMSGS ]  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

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. I nomi in due o tre parti devono essere delimitati, ad esempio 'Person.AddressType' o [Person.AddressType].

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. Vedere la sezione "Eccezioni" riportata di seguito.
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value ) Il valore Identity corrente è impostato su 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, la prima riga inserita dopo l'esecuzione di DBCC CHECKIDENT usa new_reseed_value come valore Identity. Se sono presenti righe nella tabella o se tutte le righe sono state rimosse tramite l'istruzione DELETE, per la successiva riga inserita viene usato new_reseed_value più il valore di incremento corrente. Se una transazione inserisce una riga e viene in seguito sottoposta a rollback, per la successiva riga inserita viene usato new_reseed_value + il valore di incremento corrente come se la riga fosse stata eliminata. 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 nella colonna. Specificare quindi tale valore 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, 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 nuovo valore iniziale.

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.

Non è possibile usare DBCC CHECKIDENT per le attività seguenti:

  • Modificare il valore di inizializzazione originale specificato per una colonna Identity quando è stata creata la tabella o la vista.

  • Reinizializzare righe esistenti in una tabella o vista.

Per modificare il valore di inizializzazione originale e reinizializzare le eventuali righe esistenti, 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 definizione delle opzioni per una tabella che include una colonna Identity, DBCC CHECKIDENT restituisce il messaggio seguente per tutte le operazioni tranne una, ovvero quando si specifica un nuovo valore di inizializzazione.

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

Quando DBCC CHECKIDENT viene usato per specificare un nuovo valore di inizializzazione usando RESEED new_reseed_value, viene restituito il messaggio seguente.

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

Autorizzazioni

Il chiamante deve essere proprietario dello schema contenente la tabella o membro del ruolo predefinito del server sysadmin o dei ruoli predefiniti del database db_owner e db_ddladmin.

Azure Synapse Analytics richiede autorizzazioni di db_owner.

Esempi

R. Reimpostazione del valore Identity corrente, se necessario

Nell'esempio seguente viene reimpostato il valore Identity corrente, se necessario, della tabella specificata nel database AdventureWorks2012 .

USE AdventureWorks2012;  
GO  
DBCC CHECKIDENT ('Person.AddressType');  
GO  

B. Visualizzazione del valore Identity corrente

L'esempio seguente segnala il valore Identity corrente nella tabella specificata nel database AdventureWorks2012 e non corregge il valore Identity se non è corretto.

USE AdventureWorks2012;
GO  
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO  

C. Forzatura del valore Identity corrente su un nuovo valore

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

USE AdventureWorks2012;  
GO  
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);  
GO  

D. Reimpostazione del valore Identity in una tabella vuota

L'esempio seguente il valore Identity corrente della colonna ErrorLogID nella tabella ErrorLog viene impostato su 1, dopo l'eliminazione di tutti i record dalla tabella. Poiché nella tabella non sono presenti righe, la successiva riga inserita userà il valore 1, ovvero il nuovo valore Identity corrente senza aggiungere il valore di incremento definito per la colonna.

USE AdventureWorks2012;  
GO  
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);  
GO  

Vedere anche

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)
IDENTITY (Proprietà) (Transact-SQL)
Replicare colonne Identity
USE (Transact-SQL)
IDENT_SEED (Transact-SQL)
IDENT_INCR (Transact-SQL)