Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
sql database v Microsoft Fabric
Zkontroluje aktuální hodnotu identity pro zadanou tabulku v SQL Serveru a v případě potřeby změní hodnotu identity. Pomocí DBCC CHECKIDENT můžete také ručně nastavit novou aktuální hodnotu identity pro sloupec identity.
Tento článek a jeho IDENTITY syntax se liší na různých platformách SQL Database Engine. Pro Microsoft Fabric Data Warehouse vyberte Fabric Data Warehouse v rozbalovacím seznamu verzí.
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 ]
Syntaxe pro Azure Synapse Analytics:
DBCC CHECKIDENT
(
table_name
[ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]
Argumenty
table_name
Název tabulky, pro kterou chcete zkontrolovat aktuální hodnotu identity. Tabulka, kterou určíte, musí obsahovat sloupec identity. Názvy tabulek musí dodržovat pravidla pro identifikátory . Používejte oddělovače pro dvou- nebo třídílná jména, jako Person.AddressType je nebo [Person].[AddressType].
NORESEED
Určuje, že by se neměla změnit aktuální hodnota identity.
RESEED
Určuje, že by se měla změnit aktuální hodnota identity.
new_reseed_value
Nová hodnota, která se má použít jako aktuální hodnota sloupce identity.
S NO_INFOMSGS
Potlačí všechny informační zprávy.
Poznámky
Konkrétní korekce, které přinášejí DBCC CHECKIDENT aktuální identitní hodnotu, závisí na specifikacích parametrů.
DBCC CHECKIDENT příkaz |
Oprava identity nebo opravy provedené |
|---|---|
DBCC CHECKIDENT (<table_name>, NORESEED) |
Aktuální hodnota identity se resetuje.
DBCC CHECKIDENT vrátí aktuální hodnotu identity a aktuální maximální hodnotu sloupce identity. Pokud nejsou obě hodnoty stejné, resetujte identitní hodnotu, abyste předešli možným chybám nebo mezerám v posloupnosti hodnot. |
DBCC CHECKIDENT (<table_name>)nebo DBCC CHECKIDENT (<table_name>, RESEED) |
Pokud je aktuální hodnota identity tabulky menší než maximální hodnota identity uložená ve sloupci identity, DBCC CHECKIDENT resetujte ji použitím maximální hodnoty ve sloupci identity. Podívejte se na část Výjimky následující části. |
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) |
Aktuální hodnota identity je nastavena na new_reseed_value. Pokud od vytvoření tabulky nejsou do tabulky vloženy žádné řádky, nebo pokud jsou všechny řádky odstraněny pomocí příkazu TRUNCATE TABLE , první řádek vložený po spuštění DBCC CHECKIDENT slouží new_reseed_value jako identita. Pokud jsou v tabulce přítomny řádky, nebo pokud jsou všechny řádky odstraněny pomocí příkazu DELETE , další vložený řádek použije new_reseed_value + aktuální hodnotu přírůstku . Pokud transakce vloží řádek a je později vrácena zpět, další vložený řádek použije new_reseed_value + aktuální hodnotu přírůstku , jako by byl řádek smazán. Pokud tabulka není prázdná, nastavení hodnoty identity na číslo menší než maximální hodnota ve sloupci identity může mít za následek jednu z následujících podmínek:- Pokud existuje omezení PRIMARY KEY nebo UNIQUE ve sloupci identity, při pozdějších vloženích operací do tabulky se vygeneruje chybová zpráva 2627, protože generovaná hodnota identity je v konfliktu s existujícími hodnotami.- Pokud omezení nebo PRIMARY KEYUNIQUE neexistuje, pozdější operace s vložením vedou k duplicitním identitním hodnotám. |
Výjimky
Následující tabulka uvádí podmínky, kdy DBCC CHECKIDENT automaticky neobnoví aktuální hodnotu identity a poskytuje metody pro resetování hodnoty.
| Podmínka | Metody resetování |
|---|---|
| Aktuální hodnota identity je větší než maximální hodnota v tabulce. | Spuštěním DBCC CHECKIDENT (<table_name>, NORESEED) určete aktuální maximální hodnotu ve sloupci. V dalším kroku zadejte hodnotu jako new_reseed_value v příkazu DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>).nebo Spusťte DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) s new_reseed_value nastavenou na nízkou hodnotu a spuštěním DBCC CHECKIDENT (<table_name>, RESEED) hodnotu opravte. |
| Všechny řádky se z tabulky odstraní. | Spusťte DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) s new_reseed_value nastavenou na novou počáteční hodnotu. |
Změna počáteční hodnoty
Počáteční hodnota je hodnota vložená do sloupce identity prvního řádku načteného do tabulky. Všechny následující řádky obsahují aktuální hodnotu identity a hodnotu přírůstku, kde aktuální hodnota identity je poslední hodnota identity vygenerovaná pro tabulku nebo zobrazení.
Nemůžete použít DBCC CHECKIDENT pro následující úlohy:
Změňte původní počáteční hodnotu zadanou pro sloupec identity při vytvoření tabulky nebo zobrazení.
Převést existující řádky v tabulce nebo zobrazení.
Pokud chcete změnit původní počáteční hodnotu a znovu zadat všechny existující řádky, umístěte sloupec identity a znovu vytvořte novou počáteční hodnotu. Pokud tabulka obsahuje data, čísla identit se přidají do existujících řádků se zadanými počátečními a přírůstkovými hodnotami. Pořadí, ve kterém jsou řádky aktualizovány, není zaručeno.
Sady výsledků
Bez ohledu na to, zda zadáte jakékoli možnosti pro tabulku obsahující sloupec identity, DBCC CHECKIDENT vrátí následující zprávu pro všechny operace kromě jedné. Tato operace určuje novou počáteční hodnotu.
Kontrola informací o identitě: aktuální hodnota identity<aktuální hodnota identity>, aktuální hodnota sloupce<hodnotu aktuálního sloupce>. Provádění DBCC bylo dokončeno. Pokud dbCC vytiskne chybové zprávy, obraťte se na správce systému.
Pokud DBCC CHECKIDENT slouží k zadání nové počáteční hodnoty pomocí RESEED <new_reseed_value>, vrátí se následující zpráva.
Kontrola informací o identitě: aktuální hodnota identity<aktuální hodnota identity>. Provádění DBCC bylo dokončeno. Pokud dbCC vytiskne chybové zprávy, obraťte se na správce systému.
Dovolení
Volající musí vlastnit schéma, které obsahuje tabulku, nebo být členem správce systému pevné role serveru, db_owner pevné databázové role nebo db_ddladmin pevné databázové role.
Azure Synapse Analytics vyžaduje db_owner oprávnění.
Příklady
A. V případě potřeby resetujte aktuální hodnotu identity.
Následující příklad resetuje aktuální hodnotu identity, pokud je to potřeba, pro specifikovanou tabulku v databázi.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Sestava aktuální hodnoty identity
Následující příklad uvádí aktuální hodnotu identity pro zadanou tabulku v databázi a neopravuje hodnotu identity, pokud je nesprávná.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO
C. Vynucení aktuální hodnoty identity na novou hodnotu
Následující příklad nutí AddressType aktuální identitní hodnotu sloupce AddressTypeID v tabulce na hodnotu 10. Protože tabulka obsahuje již existující řádky, další vložený řádek používá hodnotu 11. Nová aktuální hodnota identity definovaná pro sloupec plus 1 je hodnota přírůstku sloupce.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D. Resetování hodnoty identity v prázdné tabulce
Následující příklad předpokládá identitu tabulky a (1, 1) nutí aktuální hodnotu identity sloupce ErrorLogID tabulky ErrorLog na hodnotu 1 po smazání všech záznamů z tabulky. Protože tabulka nemá žádné existující řádky, další vložený řádek používá hodnotu 1. Nová aktuální hodnota identity bez přidání hodnoty přírůstku definované pro sloupec po TRUNCATE, nebo přidání hodnoty přírůstku po 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
Související obsah
- ALTER TABLE (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- DBCC (Transact-SQL)
- IDENTITY (Vlastnost) (Transact-SQL)
- CREATE TABLE (Transact-SQL) IDENTITY (Vlastnost)
- replikace sloupců identit
- USE (Transact-SQL)
- IDENT_SEED (Transact-SQL)
- IDENT_INCR (Transact-SQL)
platí pro:Warehouse v Microsoft Fabric
Znovu seje identitní hodnotu tabulky v Fabric Data Warehouse. Použijte DBCC CHECKIDENT po vložení explicitních hodnot s k SET IDENTITY_INSERT přerovnání rozsahu identity a prevenci konfliktů s budoucími automaticky generovanými hodnotami.
Tento článek a jeho IDENTITY syntax se liší na různých platformách SQL Database Engine.
Syntax
DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )
Argumenty
table_name
Název tabulky, pro kterou se má přesedávat hodnota identity. Tabulka musí obsahovat sloupec identity. Názvy tabulek mohou obsahovat název schématu, například 'dbo.DimCustomer' nebo '[dbo].[DimCustomer]'.
RESEED
Klíčové slovo RESEED je volitelné, ale DBCC CHECKIDENT vždy provádí operaci opětovného seedování. Zahrnutí nebo její vynechání přináší stejné výsledky.
Klíčové RESEED slovo instruuje Database Engine, aby prohledal všechny použité a rezervované rozsahy identit a nastavil další hodnotu identity, aby se předešlo konfliktům s existujícími hodnotami. V Fabric Data Warehouse provede rozsah povědomého skenování všech distribuovaných výpočetních uzlů, RESEED aby určil správnou další hodnotu.
Poznámky
- V Fabric Data Warehouse jediným argumentem, který podporuje
DBCC CHECKIDENT, jeRESEEDoption, kterou vždy vykoná. Systém automaticky určuje správné rozsahy hodnoty další identity na základě existujících dat. Nemůžeš si zadat vlastní hodnotu přeseedování. - Vždy spusťte
DBCC CHECKIDENTpo použití proIDENTITY_INSERTvložení explicitních hodnot. Tato operace zajišťuje, že budoucí automaticky generované hodnoty nekolidují s ručně vloženými hodnotami. - V Fabric Data Warehouse není podporováno specifikování vlastního
new_reseed_valuerežimu. Pokus o zadání hodnoty vrátí následující chybu:Specifying a custom seed in Fabric Data Warehouse is not supported. -
DBCC CHECKIDENTzískává zámky, které mohou blokovat současné operace DML a DDL. Pro minimalizaci narušení spusťte příkaz izolovaně, když jiné procesy tabulku aktivně nepoužívají.
Dovolení
Musíte vlastnit stůl nebo mít ALTER povolení k jeho umístění.
Příklady
A. Reseed po vložení hodnot sentinel
Po naplnění hodnot sentinel v tabulkě rozměrů , SET IDENTITY_INSERTznovu seedujte sloupec identity, aby se zabránilo kolizi budoucích automaticky generovaných hodnot s ručně vloženými hodnotami.
-- 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. Znovu osetí po hromadné migraci
Po migraci historických dat s explicitními hodnotami identity znovu seedujte tabulku, aby nové řádky obdržely hodnoty, které se nepřekrývají s migrovanými daty.
-- 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. Reseed po COPY INTO pomocí IDENTITY_INSERT
Po načtení dat s COPY INTO while IDENTITY_INSERT is ON, znovu seedujte sloupec identity.
COPY INTO Možnosti přepisují jakékoli nastavení na úrovni relace pro 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. Reseed bez klíčového slova RESEED
Klíčové slovo RESEED je volitelné, ale DBCC CHECKIDENT vždy provádí operaci opětovného seedování. Zahrnutí nebo její vynechání přináší stejné výsledky.
-- Reseed without the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore');
-- Reseed with the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore', RESEED);