Olvasás angol nyelven

Megosztás a következőn keresztül:


DBCC CHECKIDENT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse Analytics

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.

Transact-SQL szintaxis konvenciói

Szintaxis

Az SQL Server és az Azure SQL Database szintaxisa:

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

Az Azure Synapse Analytics szintaxisa:

syntaxsql
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é. A megadott táblának tartalmaznia kell egy identitásoszlopot. A táblaneveknek azonosítókszabályait kell követnie. Két vagy három résznevet kell elválasztani, 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 konkrét javításai a paraméter specifikációitól függenek.

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 egyezik meg, állítsa alaphelyzetbe az identitás értékét, hogy elkerülje az értékek sorozatában előforduló esetleges hibákat vagy hiányosságokat.
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, a rendszer az identitásoszlopban lévő maximális érték használatával alaphelyzetbe állítja. 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 szúrt be sorokat a táblába, vagy ha az összes sort eltávolították a TRUNCATE TABLE utasítással, a DBCC CHECKIDENT futtatása után beszúrt első sor new_reseed_value használ identitásként. Ha sorok találhatók a táblában, vagy ha az összes sort eltávolították a DELETE utasítással, a következő beszúrt sor new_reseed_value + az aktuális növekmény értéket használja. Ha egy tranzakció beszúr egy sort, és később visszagördít, a következő beszúrt sor new_reseed_value + az aktuális növekmény értéket használja, 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ásoszlopban ELSŐDLEGES KULCS vagy EGYEDI korlátozás található, akkor a rendszer a 2627-ben megjelenő hibaüzenetet fogja generálni, amikor később beszúrja a műveletet a táblába, mert a létrehozott identitásérték ütközik a meglévő értékekkel.

– Ha nem létezik ELSŐDLEGES KULCS vagy EGYEDI korlátozás, a későbbi beszúrási műveletek ismétlődő 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

Az alábbi példa alaphelyzetbe állítja a AdventureWorks2022 adatbázis megadott táblájának aktuális identitásértékét, ha szükséges.

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

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

Az alábbi példa a AdventureWorks2022 adatbázis megadott táblájának aktuális identitásértékét jelenti, és nem javítja ki az identitásértéket, ha helytelen.

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

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

Az alábbi példa a AddressType tábla AddressTypeID oszlopában lévő aktuális identitásértéket 10-re kényszeríti. Mivel a táblázat meglévő sorokat tartalmaz, a következő beszúrt sor értéke 11 lesz. Az oszlophoz definiált új jelenlegi identitásérték plusz 1 (ez az oszlop növekményes értéke).

SQL
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

Az alábbi példa a (1, 1) táblaidentitását feltételezi, és az ErrorLog tábla ErrorLogID oszlopában lévő aktuális identitásértéket 1 értékre kényszeríti, miután az összes rekordot törölte a táblából. Mivel a táblázatnak nincsenek meglévő sorai, a következő beszúrt sor értéke 1 lesz, vagyis az új jelenlegi identitásérték anélkül, hogy a TRUNCATE után az oszlophoz definiált növekményértéket, vagy a DELETE után adja hozzá a növekményértéket.

SQL
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

Lásd még: