Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL-databas i Microsoft Fabric
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.
Denna artikel och syntaxen skiljer IDENTITY sig åt på olika plattformar i SQL Database Engine. För Microsoft Fabric Data Warehouse, välj Fabric Data Warehouse i versionslistan.
Transact-SQL syntaxkonventioner
Syntax
Syntax for SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Database in Fabric:
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. Tabellen du anger måste innehålla en identitetskolumn. Tabellnamn måste följa reglerna för identifierare. Använd avgränsare för två- eller tredelade namn, såsom 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 korrigeringarna som DBCC CHECKIDENT görs i 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, återställ 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, DBCC CHECKIDENT återställs det genom att använda maximalt värde 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 lagts in i tabellen sedan tabellen skapades, eller om alla rader tas bort med satsenTRUNCATE TABLE, används new_reseed_value den första raden som lagts in efter att du kört DBCC CHECKIDENT som identitet. Om rader finns i tabellen, eller om alla rader tas bort med satsen DELETE , använder new_reseed_value nästa insatta rad + det aktuella inkrementvärdet . Om en transaktion infogar en rad och senare rullas tillbaka, använder new_reseed_value nästa insatta rad + det aktuella inkrementvärdet som om raden raderades. 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 en PRIMARY KEY eller UNIQUE begränsning finns på identitetskolumnen genereras felmeddelande 2627 vid senare insättningsoperationer i tabellen eftersom det genererade identitetsvärdet krockar med befintliga värden.- Om en PRIMARY KEY eller UNIQUE begränsning inte existerar resulterar senare insättningsoperationer i dubbletter av 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
Följande exempel återställer det aktuella identitetsvärdet, om det behövs, för den angivna tabellen i databasen.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Rapportera det aktuella identitetsvärdet
Följande exempel rapporterar det aktuella identitetsvärdet för den angivna tabellen i 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 för kolumnen AddressTypeID i AddressType tabellen till ett värde på 10. Eftersom tabellen har befintliga rader använder nästa insatta rad 11 som värde. Det nya aktuella identitetsvärdet som definieras för kolumnen plus 1 är kolumnens inkrementvärde.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D. Återställa identitetsvärdet i en tom tabell
Följande exempel antar en tabellidentitet av (1, 1) och tvingar det aktuella identitetsvärdet för kolumnen ErrorLogID i ErrorLog tabellen till värdet 1, efter att alla poster har tagits bort från tabellen. Eftersom tabellen inte har några befintliga rader använder nästa insatta rad 1 som värde. Det nya aktuella identitetsvärdet utan att lägga till det inkrementvärde som definieras för kolumnen efter TRUNCATE, eller lägga till inkrementvä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
Relaterat innehåll
gäller för:Warehouse i Microsoft Fabric
Omseedar identitetsvärdet för en tabell i Fabric Data Warehouse.
DBCC CHECKIDENT Använd efter att ha infogat explicita värden med SET IDENTITY_INSERT för att justera identitetsintervall och förhindra konflikter med framtida automatiskt genererade värden.
Denna artikel och syntaxen skiljer IDENTITY sig åt på olika plattformar i SQL Database Engine.
Transact-SQL syntaxkonventioner
Syntax
DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )
Argument
table_name
Namnet på tabellen för vilken identitetsvärdet ska omplaceras. Tabellen måste innehålla en identitetskolumn. Tabellnamn kan inkludera schemanamnet, såsom 'dbo.DimCustomer' eller '[dbo].[DimCustomer]'.
RESEED
Nyckelordet RESEED är valfritt, men DBCC CHECKIDENT utför alltid så-så-operationen. Att inkludera alternativet eller utelämna det ger samma resultat.
Nyckelordet RESEED instruerar Database Engine att skanna alla använda och reserverade identitetsintervall och sätta nästa identitetsvärde för att undvika konflikter med befintliga värden. I Fabric Data Warehouse RESEED utför en intervallmedveten skanning över alla distribuerade beräkningsnoder för att bestämma rätt nästa värde.
Anmärkningar
- I Fabric Data Warehouse är det enda argumentet som
DBCC CHECKIDENTstöder optionenRESEED, vilket den alltid gör. Systemet bestämmer automatiskt de korrekta nästa identitetsvärdeintervallen baserat på befintliga data. Du kan inte ange ett anpassat seed-värde. - Kör
DBCC CHECKIDENTalltid efter att ha använtIDENTITY_INSERTatt infoga explicita värden. Denna operation säkerställer att framtida automatiskt genererade värden inte kolliderar med manuellt insatta värden. - I Fabric Data Warehouse stöds inte det att specificera en anpassad anpassning
new_reseed_value. Försök att ange ett värde ger följande fel:Specifying a custom seed in Fabric Data Warehouse is not supported. -
DBCC CHECKIDENTfår lås som kan blockera samtidiga DML- och DDL-operationer. För att minimera störningar, kör kommandot isolerat när andra processer inte aktivt använder tabellen.
Behörigheter
Du måste äga bordet eller ha ALTER tillstånd på bordet.
Exempel
A. Omsåd efter att sentinelvärden har satt in
Efter att sentinelvärden i en dimensionstabell har SET IDENTITY_INSERTfyllts med , återställ identitetskolumnen för att förhindra att framtida automatiskt genererade värden kolliderar med manuellt insatta värden.
-- 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. Återsådd efter bulkmigration
Efter att ha migrerat historisk data med explicita identitetsvärden, återställ tabellen för att säkerställa att nya rader får värden som inte överlappar med migrerad data.
-- 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. Såd om efter COPY INTO med IDENTITY_INSERT
Efter att ha laddat data med COPY INTO medan IDENTITY_INSERT är ON, återskapa identitetskolumnen.
COPY INTO Alternativ åsidosätter alla sessionsnivåinställningar för 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. Omseeda utan nyckelordet RESEED
Nyckelordet RESEED är valfritt, men DBCC CHECKIDENT utför alltid så-så-operationen. Att inkludera alternativet eller utelämna det ger samma resultat.
-- Reseed without the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore');
-- Reseed with the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore', RESEED);