Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Database SQL in Microsoft Fabric
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.
Questo articolo e la IDENTITY sintassi differiscono tra le diverse piattaforme del SQL motore di database. Per Microsoft Fabric Data Warehouse, seleziona Fabric Data Warehouse nell'elenco a tendina delle versioni.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
Sintassi per SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure, database SQL in Fabric:
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 che specifichi deve contenere una colonna identità. I nomi delle tabelle devono essere conformi alle regole per gli identificatori. Usa delimitatori per nomi a due o tre parti, come 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.
CON NO_INFOMSGS
Disattiva tutti i messaggi informativi.
Osservazioni:
Le correzioni specifiche che DBCC CHECKIDENT apporta al valore identità corrente dipendono dalle specifiche dei parametri.
DBCC CHECKIDENT comando |
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 sono uguali, azzera il valore identità per evitare possibili errori o lacune nella sequenza dei valori. |
DBCC CHECKIDENT (<table_name>)or DBCC CHECKIDENT (<table_name>, RESEED) |
Se il valore identità corrente di una tabella è inferiore al valore identitario massimo memorizzato nella colonna identità, DBCC CHECKIDENT lo resetta usando il valore massimo nella colonna identità. 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 vengono inserite righe nella tabella da quando la tabella è stata creata, o se tutte le righe vengono rimosse usando l'istruzione TRUNCATE TABLE , la prima riga inserita dopo l'esecuzione DBCC CHECKIDENT viene utilizzata new_reseed_value come identità. Se sono presenti righe nella tabella, o se tutte le righe vengono rimosse usando l'istruzione DELETE , la riga successiva inserita usa new_reseed_value + il valore attuale dell'incremento . Se una transazione inserisce una riga e poi viene annullata indietro, la riga successiva inserita usa new_reseed_value + il valore attuale di incremento 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 PRIMARY KEY vincolo or UNIQUE sulla colonna identità, il messaggio di errore 2627 viene generato nelle operazioni successive di inserimento nella tabella perché il valore identità generato è in conflitto con i valori esistenti.- Se non esiste un PRIMARY KEY vincolo o UNIQUE o (o vincolo o), operazioni successive di inserimento producono valori identità 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
Il seguente esempio reimposta il valore identitario corrente, se necessario, per la tabella specificata nel database.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Segnalare il valore identity corrente
L'esempio seguente riporta il valore identità corrente per la tabella specificata nel database e non corregge il valore identità se è errato.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO
C. Forzare il valore Identity corrente a un nuovo valore
Il seguente esempio costringe il valore identitario corrente della AddressTypeID colonna nella AddressType tabella a 10. Poiché la tabella contiene righe esistenti, la riga successiva inserita usa 11 come valore. Il nuovo valore identitario corrente definito per la colonna più 1 è il valore incrementale della colonna.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D. Reimpostare il valore Identity in una tabella vuota
Il seguente esempio assume un'identità di tabella e (1, 1) forza il valore identitario corrente della ErrorLogID colonna nella ErrorLog tabella a 1, dopo aver eliminato tutti i record dalla tabella. Poiché la tabella non ha righe esistenti, la riga successiva inserita usa 1 come valore. Il nuovo valore di identità 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
Contenuti correlati
Si applica a:Warehouse in Microsoft Fabric
Risemina il valore identità di una tabella in Fabric Data Warehouse. Usare DBCC CHECKIDENT dopo aver inserito valori espliciti per SET IDENTITY_INSERT riallineare gli intervalli di identità e prevenire conflitti con i valori generati automaticamente in futuro.
Questo articolo e la IDENTITY sintassi differiscono tra le diverse piattaforme del SQL motore di database.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )
Argomenti
table_name
Il nome della tabella per cui ripartire il valore identità. La tabella deve contenere una colonna identità. I nomi delle tabelle possono includere il nome dello schema, come 'dbo.DimCustomer' o '[dbo].[DimCustomer]'.
RESEED
La RESEED parola chiave è opzionale, ma DBCC CHECKIDENT esegue sempre l'operazione di reseed. Includere o omettere l'opzione produce gli stessi risultati.
La RESEED parola chiave istruisce il motore di database a scansionare tutti gli intervalli di identità utilizzati e riservati e a impostare il valore di identità successivo per evitare conflitti con i valori esistenti. In Fabric Data Warehouse, RESEED viene effettuata una scansione consapevoli dell'intervallo su tutti i nodi di calcolo distribuiti per determinare il valore successivo corretto.
Osservazioni:
- In Fabric Data Warehouse, l'unico argomento che
DBCC CHECKIDENTsostiene è l'opzioneRESEED, che essa esegue sempre. Il sistema determina automaticamente i corretti intervalli di valore di identità successiva basandosi sui dati esistenti. Non puoi specificare un valore di reseed personalizzato. - Esegui
DBCC CHECKIDENTsempre dopo aver inseritoIDENTITY_INSERTvalori espliciti. Questa operazione garantisce che i valori generati automaticamente futuri non collidano con i valori inseriti manualmente. - In Fabric Data Warehouse, specificare una personalizzazione
new_reseed_valuenon è supportato. Tentando di fornire un valore restituisce il seguente errore:Specifying a custom seed in Fabric Data Warehouse is not supported. -
DBCC CHECKIDENTacquisisce lock che possono bloccare operazioni DML e DDL contemporanee. Per minimizzare le interruzioni, esegui il comando in isolamento quando altri processi non stanno usando attivamente la tabella.
Autorizzazioni
Devi possedere il tavolo o avere ALTER il permesso di esserlo.
Esempi
R. Risemina dopo aver inserito i valori sentinella
Dopo aver popolato i valori sentinella in una tabella delle dimensioni con SET IDENTITY_INSERT, riseed la colonna identità per evitare che i futuri valori generati automaticamente collidano con quelli inseriti manualmente.
-- Insert sentinel values
SET IDENTITY_INSERT dbo.DimCustomer ON;
INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName)
VALUES (-1, 'Unknown'),
(-2, 'Not Applicable');
SET IDENTITY_INSERT dbo.DimCustomer OFF;
-- Reseed to realign future identity values
DBCC CHECKIDENT('dbo.DimCustomer', RESEED);
B. Risemina dopo la migrazione in massa
Dopo aver migrato i dati storici con valori di identità espliciti, riseed la tabella per assicurarti che le nuove righe ricevano valori che non si sovrappongono ai dati migrati.
-- After migrating data with IDENTITY_INSERT
DBCC CHECKIDENT('dbo.DimProduct', RESEED);
-- Future inserts receive auto-generated values beyond the migrated range
INSERT INTO dbo.DimProduct (ProductName, Category)
VALUES ('New Widget', 'Hardware');
C. Reseed dopo COPY INTO con IDENTITY_INSERT
Dopo aver caricato i dati con COPY INTO mentre IDENTITY_INSERT è ON, riseed la colonna identità.
COPY INTO Le opzioni sovrascrivono qualsiasi impostazione a livello di sessione per IDENTITY_INSERT.
COPY INTO dbo.DimStore (StoreKey 1, StoreName 2, Region 3)
FROM 'https://storage.blob.core.windows.net/migration/dimstore.csv'
WITH (
FILE_TYPE = 'CSV',
IDENTITY_INSERT = 'ON'
);
-- Reseed after bulk load
DBCC CHECKIDENT('dbo.DimStore', RESEED);
D. Reseed senza la parola chiave RESEED
La RESEED parola chiave è opzionale, ma DBCC CHECKIDENT esegue sempre l'operazione di reseed. Includere o omettere l'opzione produce gli stessi risultati.
-- Reseed without the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore');
-- Reseed with the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore', RESEED);