Condividi tramite


DBCC CHECKIDENT (Transact-SQL)

Si applica a: SQL Server Azure SQL DatabaseIstanza gestita di SQL di AzureAzure 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 della 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 ]

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 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>)

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. 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 usa new_reseed_value come identità. Se nella tabella sono presenti righe o se tutte le righe sono state rimosse tramite l'istruzione DELETE, la riga successiva inserita usa new_reseed_value + il valore di incremento corrente . Se una transazione inserisce una riga e viene eseguito il rollback successivo, la riga successiva inserita usa 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 generano 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.

oppure

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 a 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 aggiungendo 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

Vedi anche