DBCC CHECKIDENT (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-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

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 CHECKIDENT stö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 CHECKIDENT alltid efter att ha använt IDENTITY_INSERT att 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 anpassningnew_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 CHECKIDENT få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);