Lezen in het Engels

Delen via


DBCC CHECKIDENT (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics-

Controleert de huidige identiteitswaarde voor de opgegeven tabel in SQL Server en wijzigt, indien nodig, de identiteitswaarde. U kunt DBCC CHECKIDENT ook gebruiken om handmatig een nieuwe huidige identiteitswaarde in te stellen voor de identiteitskolom.

Transact-SQL syntaxisconventies

Syntaxis

Syntaxis voor SQL Server en Azure SQL Database:

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

Syntaxis voor Azure Synapse Analytics:

syntaxsql
DBCC CHECKIDENT
 (
    table_name
        [ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]

Argumenten

table_name

De naam van de tabel waarvoor de huidige identiteitswaarde moet worden gecontroleerd. De opgegeven tabel moet een identiteitskolom bevatten. Tabelnamen moeten de regels voor id'svolgen. Namen van twee of drie delen moeten worden gescheiden, zoals Person.AddressType of [Person].[AddressType].

NORESEED

Hiermee geeft u op dat de huidige identiteitswaarde niet mag worden gewijzigd.

RESEED

Hiermee geeft u op dat de huidige identiteitswaarde moet worden gewijzigd.

new_reseed_value

De nieuwe waarde die moet worden gebruikt als de huidige waarde van de identiteitskolom.

MET NO_INFOMSGS

Onderdrukt alle informatieve berichten.

Opmerkingen

De specifieke correcties die zijn aangebracht in de huidige identiteitswaarde, zijn afhankelijk van de parameterspecificaties.

DBCC CHECKIDENT-opdracht Identiteitscorrectie of correcties die zijn aangebracht
DBCC CHECKIDENT (<table_name>, NORESEED) Huidige identiteitswaarde wordt niet opnieuw ingesteld. DBCC CHECKIDENT retourneert de huidige identiteitswaarde en de huidige maximumwaarde van de identiteitskolom. Als de twee waarden niet hetzelfde zijn, moet u de identiteitswaarde opnieuw instellen om potentiële fouten of hiaten in de reeks waarden te voorkomen.
DBCC CHECKIDENT (<table_name>)

of

DBCC CHECKIDENT (<table_name>, RESEED)
Als de huidige identiteitswaarde voor een tabel kleiner is dan de maximumidentiteitswaarde die is opgeslagen in de identiteitskolom, wordt deze opnieuw ingesteld met behulp van de maximumwaarde in de identiteitskolom. Zie de volgende sectie Uitzonderingen.
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) De huidige identiteitswaarde wordt ingesteld op de new_reseed_value. Als er geen rijen in de tabel zijn ingevoegd sinds de tabel is gemaakt of als alle rijen zijn verwijderd met de instructie TRUNCATE TABLE, wordt in de eerste rij die is ingevoegd nadat u DBCC CHECKIDENT hebt uitgevoerd, new_reseed_value als identiteit gebruikt. Als er rijen aanwezig zijn in de tabel of als alle rijen zijn verwijderd met de instructie DELETE, gebruikt de volgende rij die is ingevoegd new_reseed_value + de huidige huidige increment waarde. Als een transactie een rij invoegt en later wordt teruggedraaid, gebruikt de volgende rij die wordt ingevoegd new_reseed_value + de huidige huidige increment waarde alsof de rij is verwijderd. Als de tabel niet leeg is, kan het instellen van de identiteitswaarde op een getal kleiner dan de maximumwaarde in de identiteitskolom resulteren in een van de volgende voorwaarden:

- Als er een PRIMAIRE SLEUTEL of UNIEKE beperking bestaat in de identiteitskolom, wordt foutbericht 2627 gegenereerd bij latere invoegbewerkingen in de tabel omdat de gegenereerde identiteitswaarde conflicteert met bestaande waarden.

- Als er geen PRIMAIRE SLEUTEL of UNIEKE beperking bestaat, leiden latere invoegbewerkingen tot dubbele identiteitswaarden.

Uitzonderingen

De volgende tabel bevat voorwaarden wanneer DBCC CHECKIDENT de huidige identiteitswaarde niet automatisch opnieuw instelt en methoden biedt voor het opnieuw instellen van de waarde.

Conditie Methoden opnieuw instellen
De huidige identiteitswaarde is groter dan de maximumwaarde in de tabel. Voer DBCC CHECKIDENT (<table_name>, NORESEED) uit om de huidige maximumwaarde in de kolom te bepalen. Geef vervolgens die waarde op als de new_reseed_value in een DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) opdracht.

of

Voer DBCC CHECKIDENT (<table_name>, RESEED,<new_reseed_value>) uit met new_reseed_value ingesteld op een lage waarde en voer DBCC CHECKIDENT (<table_name>, RESEED) uit om de waarde te corrigeren.
Alle rijen worden uit de tabel verwijderd. Voer DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) uit met new_reseed_value ingesteld op de nieuwe beginwaarde.

De seed-waarde wijzigen

De seed-waarde is de waarde die is ingevoegd in een identiteitskolom voor de eerste rij die in de tabel is geladen. Alle volgende rijen bevatten de huidige identiteitswaarde plus de incrementele waarde waarbij de huidige identiteitswaarde de laatste identiteitswaarde is die is gegenereerd voor de tabel of weergave.

U kunt DBCC CHECKIDENT niet gebruiken voor de volgende taken:

  • Wijzig de oorspronkelijke seed-waarde die is opgegeven voor een identiteitskolom wanneer de tabel of weergave is gemaakt.

  • Bestaande rijen in een tabel of weergave opnieuw verzenden.

Als u de oorspronkelijke seed-waarde wilt wijzigen en bestaande rijen opnieuw wilt weergeven, verwijdert u de identiteitskolom en maakt u deze opnieuw om de nieuwe seed-waarde op te geven. Wanneer de tabel gegevens bevat, worden de identiteitsnummers toegevoegd aan de bestaande rijen met de opgegeven seed- en incrementele waarden. De volgorde waarin de rijen worden bijgewerkt, wordt niet gegarandeerd.

Resultatensets

Of u nu wel of niet opties opgeeft voor een tabel die een identiteitskolom bevat, DBCC CHECKIDENT het volgende bericht retourneert voor alle bewerkingen behalve één. Deze bewerking geeft een nieuwe seed-waarde op.

Identiteitsgegevens controleren: huidige identiteitswaarde<huidige identiteitswaarde>', huidige kolomwaarde'<huidige kolomwaarde>'. DBCC-uitvoering voltooid. Als DBCC foutberichten heeft afgedrukt, neemt u contact op met de systeembeheerder.

Wanneer DBCC CHECKIDENT wordt gebruikt om een nieuwe seed-waarde op te geven met behulp van RESEED <new_reseed_value>, wordt het volgende bericht geretourneerd.

Identiteitsgegevens controleren: huidige identiteitswaarde<huidige identiteitswaarde>'. DBCC-uitvoering voltooid. Als DBCC foutberichten heeft afgedrukt, neemt u contact op met de systeembeheerder.

Machtigingen

Aanroeper moet eigenaar zijn van het schema dat de tabel bevat of lid zijn van de sysadmin vaste serverfunctie, de db_owner vaste databaserol of de db_ddladmin vaste databaserol.

Voor Azure Synapse Analytics zijn db_owner machtigingen vereist.

Voorbeelden

Een. Stel de huidige identiteitswaarde opnieuw in als dit nodig is

In het volgende voorbeeld wordt de huidige identiteitswaarde opnieuw ingesteld, indien nodig, van de opgegeven tabel in de AdventureWorks2022-database.

SQL
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO

B. De huidige identiteitswaarde rapporteren

In het volgende voorbeeld wordt de huidige identiteitswaarde in de opgegeven tabel in de AdventureWorks2022-database gerapporteerd en wordt de identiteitswaarde niet gecorrigeerd als deze onjuist is.

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

C. De huidige identiteitswaarde afdwingen op een nieuwe waarde

In het volgende voorbeeld wordt de huidige id-waarde in de kolom AddressTypeID in de AddressType tabel naar een waarde van 10 gedwongen. Omdat de tabel bestaande rijen bevat, wordt in de volgende rij 11 als waarde gebruikt. De nieuwe huidige identiteitswaarde die is gedefinieerd voor de kolom plus 1 (de incrementele waarde van de kolom).

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

D. De identiteitswaarde voor een lege tabel opnieuw instellen

In het volgende voorbeeld wordt uitgegaan van een tabelidentiteit van (1, 1) en wordt de huidige identiteitswaarde in de kolom ErrorLogID in de ErrorLog tabel naar een waarde van 1 gedwongen, nadat alle records uit de tabel zijn verwijderd. Omdat de tabel geen bestaande rijen bevat, wordt in de volgende rij die is ingevoegd 1 gebruikt als de waarde, dat wil gezegd: de nieuwe huidige identiteitswaarde zonder het toevoegen van de incrementele waarde die is gedefinieerd voor de kolom na TRUNCATE of het toevoegen van de incrementele waarde na DELETE.

SQL
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

Zie ook