DBCC CHECKIDENT (Transact-SQL)DBCC CHECKIDENT (Transact-SQL)

SI APPLICA A: sìSQL Server (a partire dalla versione 2008) sìDatabase SQL di Azure sìAzure SQL Data Warehouse noParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse noParallel Data Warehouse

Verifica il valore Identity corrente per la tabella specificata in SQL Server 2017SQL Server 2017 e, se necessario, lo modifica.Checks the current identity value for the specified table in SQL Server 2017SQL Server 2017 and, if it's needed, changes the identity value. È inoltre possibile utilizzare DBCC CHECKIDENT per impostare manualmente un nuovo valore Identity corrente per la colonna Identity.You can also use DBCC CHECKIDENT to manually set a new current identity value for the identity column.

Icona di collegamento a un articoloConvenzioni della sintassi Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SintassiSyntax

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

ArgomentiArguments

table_nametable_name
Nome della tabella di cui verificare il valore Identity corrente.Is the name of the table for which to check the current identity value. La tabella specificata deve includere una colonna Identity.The table specified must contain an identity column. I nomi delle tabelle devono essere conformi alle regole per gli identificatori.Table names must follow the rules for identifiers. I nomi in due o tre parti devono essere delimitati, ad esempio 'Person.AddressType' o [Person.AddressType].Two or three part names must be delimited, such as 'Person.AddressType' or [Person.AddressType].

NORESEEDNORESEED
Specifica che non è necessario modificare il valore Identity corrente.Specifies that the current identity value shouldn't be changed.

RESEEDRESEED
Specifica che è necessario modificare il valore Identity corrente.Specifies that the current identity value should be changed.

new_reseed_valuenew_reseed_value
Nuovo valore da utilizzare come valore corrente della colonna Identity.Is the new value to use as the current value of the identity column.

WITH NO_INFOMSGSWITH NO_INFOMSGS
Disattiva tutti i messaggi informativi.Suppresses all informational messages.

RemarksRemarks

Le correzioni specifiche apportate al valore Identity corrente dipendono dalle specifiche di parametro.The specific corrections made to the current identity value depend on the parameter specifications.

Comando DBCC CHECKIDENTDBCC CHECKIDENT command Correzione o correzioni Identity apportateIdentity correction or corrections made
DBCC CHECKIDENT ( table_name, NORESEED )DBCC CHECKIDENT ( table_name, NORESEED ) Il valore Identity corrente non viene reimpostato.Current identity value is not reset. DBCC CHECKIDENT restituisce il valore Identity corrente e il valore massimo corrente della colonna Identity.DBCC CHECKIDENT returns the current identity value and the current maximum value of the identity column. Se i due valori non corrispondono, è consigliabile reimpostare il valore Identity per evitare potenziali errori o gap nella sequenza dei valori.If the two values are not the same, you should reset the identity value to avoid potential errors or gaps in the sequence of values.
DBCC CHECKIDENT ( table_name )DBCC CHECKIDENT ( table_name )

o Gestione configurazioneor

DBCC CHECKIDENT ( table_name, RESEED )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.If the current identity value for a table is less than the maximum identity value stored in the identity column, it is reset using the maximum value in the identity column. Vedere la sezione "Eccezioni" riportata di seguito.See the 'Exceptions' section that follows.
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value ) Il valore Identity corrente è impostato su new_reseed_value.Current identity value is set to the 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.If no rows have been inserted into the table since the table was created, or if all rows have been removed by using the TRUNCATE TABLE statement, the first row inserted after you run DBCC CHECKIDENT uses new_reseed_value as the 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.If rows are present in the table, or if all rows have been removed by using the DELETE statement, the next row inserted uses new_reseed_value + the current increment value. 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.If a transaction inserts a row and is later rolled back, the next row inserted uses new_reseed_value + the current increment value as if the row had been deleted. 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:If the table is not empty, setting the identity value to a number less than the maximum value in the identity column can result in one of the following conditions:

- 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.-If a PRIMARY KEY or UNIQUE constraint exists on the identity column, error message 2627 will be generated on later insert operations into the table because the generated identity value will conflict with existing values.

- Se non esiste un vincolo PRIMARY KEY o UNIQUE, le successive operazioni di inserimento causeranno valori Identity duplicati.-If a PRIMARY KEY or UNIQUE constraint does not exist, later insert operations will result in duplicate identity values.

EccezioniExceptions

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.The following table lists conditions when DBCC CHECKIDENT doesn't automatically reset the current identity value, and provides methods for resetting the value.

CondizioneCondition Metodi di reimpostazioneReset methods
Il valore Identity corrente è maggiore del valore massimo della tabella.The current identity value is larger than the maximum value in the table. Eseguire DBCC CHECKIDENT (table_name, NORESEED) per determinare il valore massimo corrente nella colonna.Execute DBCC CHECKIDENT (table_name, NORESEED) to determine the current maximum value in the column. Specificare quindi tale valore come new_reseed_value in un comando DBCC CHECKIDENT (table_name, RESEED,new_reseed_value).Next, specify that value as the new_reseed_value in a DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) command.

oppure-OR-

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.Execute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) with new_reseed_value set to a very low value, and then run DBCC CHECKIDENT (table_name, RESEED) to correct the value.
Tutte le righe sono state eliminate dalla tabella.All rows are deleted from the table. Eseguire DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) con new_reseed_value impostato sul nuovo valore iniziale.Execute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) with new_reseed_value set to the new starting value.

Modifica del valore di inizializzazioneChanging the Seed Value

Il valore di inizializzazione è il valore inserito in una colonna Identity per la prima riga caricata nella tabella.The seed value is the value inserted into an identity column for the first row loaded into the table. 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.All subsequent rows contain the current identity value plus the increment value where current identity value is the last identity value generated for the table or view.

Non è possibile usare DBCC CHECKIDENT per le attività seguenti:You can't use DBCC CHECKIDENT for the following tasks:

  • Modificare il valore di inizializzazione originale specificato per una colonna Identity quando è stata creata la tabella o la vista.Change the original seed value specified for an identity column when the table or view was created.

  • Reinizializzare righe esistenti in una tabella o vista.Reseed existing rows in a table or view.

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.To change the original seed value and reseed any existing rows, drop the identity column and recreate it specifying the new seed value. Quando la tabella contiene dati, i numeri di identità vengono aggiunti alle righe esistenti con i valori di inizializzazione e incremento specificati.When the table contains data, the identity numbers are added to the existing rows with the specified seed and increment values. L'ordine con cui le righe vengono aggiornate non è prevedibile.The order in which the rows are updated isn't guaranteed.

Set di risultatiResult Sets

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,Whether or not you specify any options for a table that contains an identity column, DBCC CHECKIDENT returns the following message for all operations except one. ovvero quando si specifica un nuovo valore di inizializzazione.That operation is specifying a new seed value.

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.When DBCC CHECKIDENT is used to specify a new seed value by using RESEED new_reseed_value, the following message is returned.

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

AutorizzazioniPermissions

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.Caller must own the schema that contains the table, or be a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role.

Con Azure SQL Data Warehouse sono richieste le autorizzazioni di db_owner.Azure SQL Data Warehouse requires db_owner permissions.

EsempiExamples

A.A. Reimpostazione del valore Identity corrente, se necessarioResetting the current identity value, if it's needed

Nell'esempio seguente viene reimpostato il valore Identity corrente, se necessario, della tabella specificata nel database AdventureWorks2012AdventureWorks2012.The following example resets the current identity value, if it's needed, of the specified table in the AdventureWorks2012AdventureWorks2012 database.

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

B.B. Visualizzazione del valore Identity correnteReporting the current identity value

Nell'esempio seguente viene visualizzato il valore Identity corrente della tabella specificata nel database AdventureWorks2012AdventureWorks2012 e, se è errato, non viene corretto.The following example reports the current identity value in the specified table in the AdventureWorks2012AdventureWorks2012 database, and doesn't correct the identity value if it's incorrect.

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

C.C. Forzatura del valore Identity corrente su un nuovo valoreForcing the current identity value to a new value

Nell'esempio seguente il valore Identity corrente della colonna AddressTypeID nella tabella AddressType viene impostato su 10.The following example forces the current identity value in the AddressTypeID column in the AddressType table to a value of 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.Because the table has existing rows, the next row inserted will use 11 as the value – the new current identity value defined for the column plus 1 (which is the column's increment value).

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

D.D. Reimpostazione del valore Identity in una tabella vuotaResetting the identity value on an empty table

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.The following example forces the current identity value in the ErrorLogID column in the ErrorLog table to a value of 1, after deleting all records from table. 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.Because the table has no existing rows, the next row inserted will use 1 as the value, that is, the new current identity value, without adding the increment value defined for the column.

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

Vedere ancheSee Also

ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)DBCC (Transact-SQL)
IDENTITY (proprietà) (Transact-SQL)IDENTITY (Property) (Transact-SQL)
Replicare colonne IdentityReplicate Identity Columns
USE (Transact-SQL)USE (Transact-SQL)
IDENT_SEED (Transact-SQL)IDENT_SEED (Transact-SQL)
IDENT_INCR (Transact-SQL)IDENT_INCR (Transact-SQL)