DBCC CHECKIDENT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-adatbázis a Microsoft Fabricben

Ellenőrzi a megadott tábla aktuális identitásértékét az SQL Serveren, és szükség esetén módosítja az identitás értékét. A DBCC CHECKIDENT használatával manuálisan is beállíthat egy új aktuális identitásértéket az identitásoszlophoz.

Ez a cikk és a IDENTITY szintaxis eltér az SQL Database Engine különböző platformjain. Microsoft Fabric Data Warehouse válaszd ki a verzió lebontott listájában a Fabric Data Warehouse-et.

Transact-SQL szintaxis konvenciói

Szintaxis

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 ]

Az Azure Synapse Analytics szintaxisa:

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

Érvek

table_name

Annak a táblának a neve, amelynek az aktuális identitásértékét ellenőrizni szeretné. Az általad megadott táblának tartalmaznia kell egy identitásoszlopot. A táblaneveknek azonosítókszabályait kell követnie. Használj elválasztókat két- vagy háromrészes nevekhez, például Person.AddressType vagy [Person].[AddressType].

NORESEED

Azt határozza meg, hogy az aktuális identitásértéket ne módosítsa.

RESEED

Megadja, hogy az aktuális identitásértéket módosítani kell.

new_reseed_value

Az identitásoszlop aktuális értékeként használandó új érték.

A NO_INFOMSGS

Letiltja az összes tájékoztató üzenetet.

Megjegyzések

Az aktuális identitásérték pontos javításai DBCC CHECKIDENT a paraméterspecifikációktól függnek.

DBCC CHECKIDENT parancs Identitáskorrekció vagy javítás
DBCC CHECKIDENT (<table_name>, NORESEED) Az aktuális identitásérték nem állítható vissza. DBCC CHECKIDENT az aktuális identitásértéket és az identitásoszlop aktuális maximális értékét adja vissza. Ha a két érték nem ugyanaz, állítsd vissza az identitásértéket, hogy elkerüld a lehetséges hibákat vagy hiányosságokat az értéksorban.
DBCC CHECKIDENT (<table_name>)

vagy

DBCC CHECKIDENT (<table_name>, RESEED)
Ha egy tábla jelenlegi identitásértéke kisebb, mint az identitásoszlopban tárolt maximális identitásérték, DBCC CHECKIDENT akkor az identitásoszlop maximális értékét használva állítsuk vissza. Lásd az alábbi Kivételek szakaszt.
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) Az aktuális identitásérték a new_reseed_valuevan beállítva. Ha a tábla létrehozása óta nem kerülnek sorokat a táblába, vagy ha az összes sort eltávolítják az TRUNCATE TABLE utasítás használatával, akkor az első sor, amelyet a futtatás DBCC CHECKIDENT után illesztettek, az new_reseed_value identitásként szolgál. Ha a táblázatban sorok vannak, vagy ha az utasítás segítségével minden sort eltávolítunkDELETE, a következő beillesztett sor + az aktuális növekedési értéket használja new_reseed_value . Ha egy tranzakció egy sort helyez be, majd később visszahúzza, a következő beillesztett sor + az aktuális inkrement értéket használja new_reseed_value , mintha a sort törölték volna. Ha a tábla nem üres, az identitás értékét az identitásoszlop maximális értékénél kisebb számra állíthatja, az alábbi feltételek egyikét eredményezheti:

- Ha az identitásoszlopon létezik vagy PRIMARY KEYUNIQUE egy vagy korlátozás, akkor a 2627-es hibaüzenet keletkezik későbbi táblázatba helyezési műveleteknél, mert a generált identitásérték ütközik a meglévő értékekkel.

- Ha a PRIMARY KEY vagy UNIQUE vagy korlátozás nem létezik, a későbbi beadási műveletek duplikált identitásértékeket eredményeznek.

Kivételek

Az alábbi táblázat felsorolja azokat a feltételeket, amikor DBCC CHECKIDENT nem állítja alaphelyzetbe automatikusan az aktuális identitásértéket, és metódusokat biztosít az érték alaphelyzetbe állításához.

Feltétel Visszaállítási módszerek
Az aktuális identitásérték nagyobb, mint a tábla maximális értéke. Hajtsa végre a DBCC CHECKIDENT (<table_name>, NORESEED) az oszlop aktuális maximális értékének meghatározásához. Ezután adja meg ezt az értéket new_reseed_value egy DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) parancsban.

vagy

Hajtsa végre a DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>)new_reseed_value alacsony értékre állításával, majd futtassa DBCC CHECKIDENT (<table_name>, RESEED) az érték kijavításához.
Minden sor törlődik a táblából. Hajtsa végre DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) az új kezdőértékre beállított new_reseed_value.

A kezdőérték módosítása

A kezdőérték a táblába betöltött első sor identitásoszlopába beszúrt érték. Minden további sor tartalmazza az aktuális identitásértéket, valamint azt a növekményes értéket, amelyben az aktuális identitásérték a tábla vagy nézet utolsó identitásértéke.

A DBCC CHECKIDENT nem használhatók a következő feladatokhoz:

  • Módosítsa az identitásoszlophoz megadott eredeti kezdőértéket a tábla vagy nézet létrehozásakor.

  • Meglévő sorok újraeltetése egy táblában vagy nézetben.

Az eredeti magérték módosításához és a meglévő sorok újraküldéséhez dobja el az identitásoszlopot, és hozza létre újra az új magértéket megadva. Ha a tábla adatokat tartalmaz, a rendszer hozzáadja az identitásszámokat a meglévő sorokhoz a megadott mag- és növekményértékekkel. A sorok frissítési sorrendje nem garantált.

Eredményhalmazok

Függetlenül attól, hogy egy identitásoszlopot tartalmazó tábla beállításait adja-e meg, DBCC CHECKIDENT az alábbi üzenetet adja vissza az összes művelethez, kivéve egyet. Ez a művelet egy új kezdőértéket ad meg.

Identitásadatok ellenőrzése: aktuális identitásérték<aktuális identitásérték>", aktuális oszlopérték "<aktuális oszlopérték>". A DBCC végrehajtása befejeződött. Ha a DBCC nyomtatta a hibaüzeneteket, forduljon a rendszergazdához.

Ha DBCC CHECKIDENT új magértéket ad meg RESEED <new_reseed_value>használatával, a következő üzenet lesz visszaadva.

Identitásadatok ellenőrzése: aktuális identitásérték<aktuális identitásérték>". A DBCC végrehajtása befejeződött. Ha a DBCC nyomtatta a hibaüzeneteket, forduljon a rendszergazdához.

Engedélyek

A hívónak rendelkeznie kell a táblát tartalmazó sémával, vagy tagja kell lennie a sysadmin rögzített kiszolgálói szerepkörnek, a db_owner rögzített adatbázis-szerepkörnek vagy a db_ddladmin rögzített adatbázis-szerepkörnek.

Az Azure Synapse Analyticshez db_owner engedély szükséges.

Példák

Egy. Szükség esetén állítsa alaphelyzetbe az aktuális identitásértéket

A következő példa szükség esetén visszaállítja az adatbázisban megadott táblázat aktuális identitásértékét.

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

B. Az aktuális identitásérték jelentése

A következő példa az adatbázisban megadott tábla aktuális identitásértékét mutatja, és nem javítja ki az identitásértéket, ha az hibás.

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

C. Az aktuális identitásérték kényszerítése új értékre

A következő példa a táblázatban lévő oszlop AddressTypeIDAddressType aktuális identitásértékét 10-re kényszeríti. Mivel a táblázatban vannak már sorok, a következő beillesztett sor 11-et használ értékként. Az új aktuális identitásérték, amelyet az oszlop plusz 1-re definiál, az oszlop inkrementértéke.

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

D. Az identitás értékének alaphelyzetbe állítása egy üres táblában

A következő példa táblaazonosítót feltételez, (1, 1) és az oszlop aktuális identitásértékét ErrorLogIDErrorLog 1-re kényszeríti, miután töröljük az összes bejegyzést a táblából. Mivel a táblázatban nincsenek meglévő sorok, a következő beillesztett sor 1-et használ értékként. Az új aktuális identitásérték anélkül , hogy hozzáadnánk az oszlophoz a TRUNCATE után definiált inkrementértéket, vagy hozzáadnánk az inkrement értéket a TRUNCATE DELETEután.

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

A következőkre vonatkozik:Warehouse a Microsoft Fabricban

Újravezesse egy tábla identitásértékét Fabric Data Warehouse-ben. Használd DBCC CHECKIDENT explicit értékek hozzáadása után SET IDENTITY_INSERT az identitástartományok újraigazításához és a jövőben automatikusan generált értékekkel való ütközések megelőzéséhez.

Ez a cikk és a IDENTITY szintaxis eltér az SQL Database Engine különböző platformjain.

Transact-SQL szintaxis konvenciói

Szintaxis

DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )

Érvek

table_name

Az a tábla neve, amelyhez az identitásértéket újra bevetjük. A táblának tartalmaznia kell egy identitásoszlopot. A táblanevek tartalmazhatják a séma nevét, például 'dbo.DimCustomer' vagy '[dbo].[DimCustomer]'.

RESEED

A RESEED kulcsszó opcionális, de DBCC CHECKIDENT mindig végrehajtja a visszavetési műveletet. Az opció bevonása vagy kihagyása ugyanazt az eredményt eredményezi.

A RESEED kulcsszó arra utasítja a Database Engine-t, hogy vizsgálja át az összes használt és fenntartott identitástartományt, és állítsa be a következő identitásértéket, hogy elkerülje az ellentmondást a meglévő értékekkel. Fabric Data Warehouse-ben RESEED távolság-tudatos szkennelést végez az összes elosztott számítási csomóponton, hogy meghatározza a helyes következő értéket.

Megjegyzések

  • Fabric Data Warehouse-ben az egyetlen érv, amely DBCC CHECKIDENT támogatja az opciótRESEED, amit mindig teljesít. A rendszer automatikusan határozza meg a megfelelő következő azonosító értéktartományokat a meglévő adatok alapján. Nem lehet egyedi újravetési értéket megadni.
  • Mindig futtatd DBCC CHECKIDENT az explicit értékek beszedése után IDENTITY_INSERT . Ez a művelet biztosítja, hogy a jövőben automatikusan generált értékek ne ütközjenek kézzel beillesztett értékekkel.
  • Fabric Data Warehouse-ben az egyedi new_reseed_value beállítás megadása nem támogatott. Az érték megadásának kísérlete a következő hibát eredményezi: Specifying a custom seed in Fabric Data Warehouse is not supported.
  • DBCC CHECKIDENT olyan zárakat szerez, amelyek képesek blokkolni az egyidejű DML és DDL műveleteket. A zavarok minimalizálása érdekében futtatjuk a parancsot különítve, amikor más folyamatok nem használják aktívan a táblát.

Engedélyek

Neked kell az asztal tulajdonosa vagy engedélyed ALTER van rajta.

Példák

Egy. Újravetés a sentinel értékek behelyezése után

Miután egy dimenziótáblázatban az őrző értékeket töltjük fel SET IDENTITY_INSERT, újravetjük az identitásoszlopot, hogy megakadályozzák a jövőben automatikusan generált értékek ütközését a kézzel beillesztett értékekkel.

-- 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. Újravetés tömeges vándorlás után

A történelmi adatok explicit identitásértékekkel történő migrálása után újravetjük a táblát, hogy az új sorok olyan értékeket kapjanak, amelyek nem fednek át az átvándorolt adatokkal.

-- 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. Újravetesd a COPY INTO után IDENTITY_INSERT

Adat betöltése után , amikor COPY INTOIDENTITY_INSERT is ON, újravetve az identitásoszlopot. COPY INTOAz opciók felülírják bármely játékmenet-szintű beállítást .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. Újravetesd a RESSEED kulcsszó nélkül

A RESEED kulcsszó opcionális, de DBCC CHECKIDENT mindig végrehajtja a visszavetési műveletet. Az opció bevonása vagy kihagyása ugyanazt az eredményt eredményezi.

-- Reseed without the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore');

-- Reseed with the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore', RESEED);