Sdílet prostřednictvím


DBCC CHECKIDENT (Transact-SQL)

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instanceazure Synapse Analytics

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.

Transact-SQL konvence syntaxe

Syntax

Syntaxe pro SQL Server a Azure SQL Database:

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. Zadaná tabulka musí obsahovat sloupec identity. Názvy tabulek musí dodržovat pravidla pro identifikátory . Názvy dvou nebo tří částí musí být oddělené, například Person.AddressType 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.

WITH NO_INFOMSGS

Potlačí všechny informační zprávy.

Poznámky

Konkrétní opravy aktuální hodnoty identity závisí na specifikacích parametrů.

Příkaz DBCC CHECKIDENT 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 tyto dvě hodnoty nejsou stejné, měli byste hodnotu identity resetovat, abyste se vyhnuli potenciální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 pro tabulku menší než maximální hodnota identity uložená ve sloupci identity, resetuje se pomocí 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 nebyly do tabulky vloženy žádné řádky od vytvoření tabulky nebo pokud byly všechny řádky odebrány pomocí příkazu TRUNCATE TABLE, první řádek vložený po spuštění DBCC CHECKIDENT použije jako identitu new_reseed_value. Pokud jsou řádky v tabulce nebo pokud byly všechny řádky odebrány pomocí příkazu DELETE, použije další vložený řádek new_reseed_value + aktuální přírůstek hodnotu. Pokud transakce vloží řádek a později se vrátí zpět, další vložený řádek použije new_reseed_value + aktuální přírůstek hodnotu, jako by byl řádek odstraně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 ve sloupci identity existuje omezení PRIMARY KEY nebo UNIQUE, vygeneruje se chybová zpráva 2627 při pozdějších operacích vložení do tabulky, protože vygenerovaná hodnota identity bude v konfliktu s existujícími hodnotami.

– Pokud neexistuje omezení PRIMÁRNÍ KLÍČ nebo UNIQUE, budou pozdější operace vložení mít za následek duplicitní hodnoty identity.

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 potřeba) zadané tabulky v databázi AdventureWorks2022.

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

B. Sestava aktuální hodnoty identity

Následující příklad hlásí aktuální hodnotu identity v zadané tabulce v databázi AdventureWorks2022 a neopraví 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 vynutí aktuální hodnotu identity ve sloupci AddressTypeID v tabulce AddressType na hodnotu 10. Vzhledem k tomu, že tabulka obsahuje existující řádky, použije se jako hodnota vložený další řádek 11. Nová aktuální hodnota identity definovaná pro sloupec plus 1 (což 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 (1, 1) a vynutí aktuální hodnotu identity ve sloupci ErrorLogID v tabulce ErrorLog na hodnotu 1 po odstranění všech záznamů z tabulky. Vzhledem k tomu, že tabulka neobsahuje žádné existující řádky, použije další vložený řádek jako hodnotu hodnotu 1, tj. novou aktuální hodnotu identity bez přidání přírůstkové hodnoty definované pro sloupec za TRUNCATE nebo přidání hodnoty přírůstku po odstraně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

Viz také