Dela via


DBCC CHECKIDENT (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Kontrollerar det aktuella identitetsvärdet för den angivna tabellen i SQL Server och ändrar vid behov identitetsvärdet. Du kan också använda DBCC CHECKIDENT för att manuellt ange ett nytt aktuellt identitetsvärde för identitetskolumnen.

Transact-SQL syntaxkonventioner

Syntax

Syntax för SQL Server och Azure SQL Database:

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

Syntax för Azure Synapse Analytics:

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

Argument

table_name

Namnet på tabellen som du vill kontrollera det aktuella identitetsvärdet för. Den angivna tabellen måste innehålla en identitetskolumn. Tabellnamn måste följa reglerna för identifierare. Två eller tre delnamn måste avgränsas, till exempel Person.AddressType eller [Person].[AddressType].

NORESEED

Anger att det aktuella identitetsvärdet inte ska ändras.

RESEED

Anger att det aktuella identitetsvärdet ska ändras.

new_reseed_value

Det nya värdet som ska användas som aktuellt värde för identitetskolumnen.

MED NO_INFOMSGS

Undertrycker alla informationsmeddelanden.

Anmärkningar

De specifika korrigeringar som görs av det aktuella identitetsvärdet beror på parameterspecifikationerna.

DBCC CHECKIDENT-kommando Identitetskorrigering eller korrigeringar som gjorts
DBCC CHECKIDENT (<table_name>, NORESEED) Det aktuella identitetsvärdet återställs inte. DBCC CHECKIDENT returnerar det aktuella identitetsvärdet och det aktuella maximala värdet för identitetskolumnen. Om de två värdena inte är samma bör du återställa identitetsvärdet för att undvika potentiella fel eller luckor i värdesekvensen.
DBCC CHECKIDENT (<table_name>)

eller

DBCC CHECKIDENT (<table_name>, RESEED)
Om det aktuella identitetsvärdet för en tabell är mindre än det maximala identitetsvärdet som lagras i identitetskolumnen återställs det med det maximala värdet i identitetskolumnen. Se avsnittet Undantag som följer.
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) Aktuellt identitetsvärde är inställt på new_reseed_value. Om inga rader har infogats i tabellen sedan tabellen skapades, eller om alla rader har tagits bort med hjälp av TRUNCATE TABLE-instruktionen, använder den första raden som infogats när du har kört DBCC CHECKIDENT new_reseed_value som identitet. Om rader finns i tabellen, eller om alla rader har tagits bort med hjälp av DELETE-instruktionen, använder nästa rad som infogas new_reseed_value + aktuell ökning värde. Om en transaktion infogar en rad och senare återställs använder nästa rad som infogas new_reseed_value + aktuell ökning värde som om raden hade tagits bort. Om tabellen inte är tom kan du ange identitetsvärdet till ett tal som är mindre än det maximala värdet i identitetskolumnen, vilket kan resultera i något av följande villkor:

– Om det finns en PRIMÄRNYCKEL eller UNIK-begränsning i identitetskolumnen genereras felmeddelandet 2627 vid senare infogningsåtgärder i tabellen eftersom det genererade identitetsvärdet kommer att stå i konflikt med befintliga värden.

– Om det inte finns någon PRIMÄRNYCKEL eller UNIK-begränsning resulterar senare infogningsåtgärder i duplicerade identitetsvärden.

Undantag

I följande tabell visas villkor när DBCC CHECKIDENT inte automatiskt återställer det aktuella identitetsvärdet och tillhandahåller metoder för att återställa värdet.

Tillstånd Återställningsmetoder
Det aktuella identitetsvärdet är större än det maximala värdet i tabellen. Kör DBCC CHECKIDENT (<table_name>, NORESEED) för att fastställa det aktuella maximala värdet i kolumnen. Ange sedan värdet som new_reseed_value i ett DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) kommando.

eller

Kör DBCC CHECKIDENT (<table_name>, RESEED,<new_reseed_value>) med new_reseed_value inställt på ett lågt värde och kör sedan DBCC CHECKIDENT (<table_name>, RESEED) för att korrigera värdet.
Alla rader tas bort från tabellen. Kör DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) med new_reseed_value inställt på det nya startvärdet.

Ändra startvärde

Seed-värdet är värdet som infogas i en identitetskolumn för den första raden som läses in i tabellen. Alla efterföljande rader innehåller det aktuella identitetsvärdet plus det inkrementsvärde där det aktuella identitetsvärdet är det sista identitetsvärdet som genererats för tabellen eller vyn.

Du kan inte använda DBCC CHECKIDENT för följande uppgifter:

  • Ändra det ursprungliga startvärde som angetts för en identitetskolumn när tabellen eller vyn skapades.

  • Återställde befintliga rader i en tabell eller vy.

Om du vill ändra det ursprungliga startvärdet och skicka om befintliga rader släpper du identitetskolumnen och återskapar den med det nya startvärdet. När tabellen innehåller data läggs identitetsnumren till i de befintliga raderna med angivna värden för startvärde och inkrement. Ordningen som raderna uppdateras i är inte garanterad.

Resultatuppsättningar

Oavsett om du anger några alternativ för en tabell som innehåller en identitetskolumn, returnerar DBCC CHECKIDENT följande meddelande för alla åtgärder utom en. Den åtgärden anger ett nytt startvärde.

Kontrollera identitetsinformation: aktuellt identitetsvärde<aktuellt identitetsvärde>, aktuellt kolumnvärde<aktuellt kolumnvärde>. DBCC-körningen har slutförts. Kontakta systemadministratören om dbcc har skrivit ut felmeddelanden.

När DBCC CHECKIDENT används för att ange ett nytt startvärde med hjälp av RESEED <new_reseed_value>returneras följande meddelande.

Kontrollera identitetsinformation: aktuellt identitetsvärde<aktuellt identitetsvärde>. DBCC-körningen har slutförts. Kontakta systemadministratören om dbcc har skrivit ut felmeddelanden.

Behörigheter

Anroparen måste äga schemat som innehåller tabellen eller vara medlem i sysadmin fast serverroll, db_owner fast databasroll eller db_ddladmin fast databasroll.

Azure Synapse Analytics kräver db_owner behörigheter.

Exempel

A. Återställ det aktuella identitetsvärdet om det behövs

I följande exempel återställs det aktuella identitetsvärdet, om det behövs, för den angivna tabellen i AdventureWorks2022-databasen.

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

B. Rapportera det aktuella identitetsvärdet

I följande exempel rapporterar det aktuella identitetsvärdet i den angivna tabellen i AdventureWorks2022-databasen och korrigerar inte identitetsvärdet om det är felaktigt.

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

C. Tvinga det aktuella identitetsvärdet till ett nytt värde

Följande exempel tvingar det aktuella identitetsvärdet i kolumnen AddressTypeID i tabellen AddressType till värdet 10. Eftersom tabellen har befintliga rader använder nästa rad som infogas 11 som värde. Det nya aktuella identitetsvärdet som definierats för kolumnen plus 1 (vilket är kolumnens inkrementsvärde).

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

D. Återställa identitetsvärdet i en tom tabell

I följande exempel förutsätts en tabellidentitet för (1, 1) och tvingar det aktuella identitetsvärdet i kolumnen ErrorLogID i tabellen ErrorLog till värdet 1, efter att alla poster från tabellen har raderats. Eftersom tabellen inte har några befintliga rader använder nästa rad som infogas 1 som värde, d.v.s. det nya aktuella identitetsvärdet utan att lägga till det inkrementsvärde som definierats för kolumnen efter TRUNCATE eller lägga till inkrementsvärdet efter 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

Se även