DBCC CHECKIDENT (Transact-SQL)
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure 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