Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL-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
Kapcsolódó tartalom
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 CHECKIDENTtá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 CHECKIDENTaz explicit értékek beszedése utánIDENTITY_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_valuebeá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 CHECKIDENTolyan 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);