DBCC CHECKIDENT (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics
Controlla il valore Identity corrente per la tabella specificata in SQL Server e, se necessario, modifica il valore identity. È anche possibile usare DBCC CHECKIDENT
per impostare manualmente un nuovo valore Identity corrente per la colonna Identity.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
Sintassi per SQL Server e database SQL di Azure:
DBCC CHECKIDENT
(
table_name
[ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]
Sintassi per Azure Synapse Analytics:
DBCC CHECKIDENT
(
table_name
[ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]
Argomenti
table_name
Nome della tabella per cui controllare 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 di 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>) or 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 non sono state inserite righe nella tabella dopo la creazione della tabella o se tutte le righe sono state rimosse tramite l'istruzione TRUNCATE TABLE, la prima riga inserita dopo l'esecuzione di DBCC CHECKIDENT utilizza new_reseed_value come identità. Se le righe sono presenti nella tabella o se tutte le righe sono state rimosse tramite l'istruzione DELETE, la riga successiva inserita utilizza new_reseed_value + il valore di incremento corrente. Se una transazione inserisce una riga e viene eseguito il rollback successivo, la riga successiva inserita utilizza 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, il messaggio di errore 2627 verrà generato nelle operazioni di inserimento successive nella tabella perché il valore Identity generato sarà in conflitto con i valori esistenti. - Se non esiste un vincolo PRIMARY KEY o UNIQUE, le operazioni di inserimento successive genereranno valori Identity duplicati. |
Eccezioni
La tabella seguente elenca le condizioni quando DBCC CHECKIDENT
non reimposta automaticamente il valore Identity corrente e fornisce metodi per reimpostare il 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 DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) comando.or Eseguire DBCC CHECKIDENT (<table_name>, RESEED,<new_reseed_value>) con new_reseed_value impostato su un valore 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 nuovo valore iniziale. |
Modificare il 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
Indica se si specificano o meno opzioni per una tabella contenente una colonna Identity, DBCC CHECKIDENT
restituisce il messaggio seguente per tutte le operazioni tranne una. ovvero quando si specifica un nuovo valore di inizializzazione.
Verifica delle informazioni sull'identità: valore identity corrente '<valore identity> corrente', valore di colonna corrente '<valore> colonna corrente'. Esecuzione DBCC completata. Se sono stati visualizzati messaggi di errore DBCC, rivolgersi all'amministratore di sistema.
Quando DBCC CHECKIDENT
viene usato per specificare un nuovo valore di inizializzazione tramite RESEED <new_reseed_value>
, viene restituito il messaggio seguente.
Verifica delle informazioni sull'identità: valore identity corrente '<valore> identity corrente'. Esecuzione DBCC completata. Se sono stati visualizzati messaggi di errore DBCC, rivolgersi all'amministratore di sistema.
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. Reimpostare il valore identity corrente, se necessario
Nell'esempio seguente viene reimpostato il valore Identity corrente, se necessario, della tabella specificata nel database AdventureWorks2022
.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Segnalare il valore identity corrente
Nell'esempio seguente viene visualizzato il valore Identity corrente della tabella specificata nel database AdventureWorks2022
e, se è errato, non viene corretto.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO
C. Forzare il valore Identity corrente a un nuovo valore
Nell'esempio seguente il valore Identity corrente della colonna AddressTypeID
nella tabella AddressType
viene impostato su 10. Poiché la tabella contiene righe esistenti, la riga successiva inserita userà 11 come valore. Nuovo valore Identity corrente definito per la colonna più 1 ,ovvero il valore di incremento della colonna.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D. Reimpostare il valore Identity in una tabella vuota
Nell'esempio seguente si presuppone un'identità di tabella di (1, 1)
e forza il valore Identity corrente nella ErrorLogID
colonna della ErrorLog
tabella su un valore 1, dopo l'eliminazione di tutti i record dalla tabella. Poiché la tabella non contiene righe esistenti, la riga successiva inserita userà 1 come valore, ovvero il nuovo valore Identity corrente senza aggiungere il valore di incremento definito per la colonna dopo TRUNCATE o aggiungere il valore di incremento dopo DELETE.
USE AdventureWorks2022;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
DELETE FROM dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 0);
GO