Udostępnij za pośrednictwem


DBCC CHECKIDENT (Transact-SQL)

Dotyczy:sql ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Sprawdza bieżącą wartość tożsamości dla określonej tabeli w programie SQL Server, a w razie potrzeby zmienia wartość tożsamości. Możesz również użyć DBCC CHECKIDENT, aby ręcznie ustawić nową bieżącą wartość tożsamości dla kolumny tożsamości.

Transact-SQL konwencje składni

Składnia

Składnia dla programu SQL Server i usługi Azure SQL Database:

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

Składnia usługi Azure Synapse Analytics:

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

Argumenty

table_name

Nazwa tabeli, dla której ma być sprawdzana bieżąca wartość tożsamości. Określona tabela musi zawierać kolumnę tożsamości. Nazwy tabel muszą być zgodne z regułami dotyczącymi identyfikatorów . Nazwy dwóch lub trzech części muszą być rozdzielane, takie jak Person.AddressType lub [Person].[AddressType].

NORESEED

Określa, że nie należy zmieniać bieżącej wartości tożsamości.

RESEED

Określa, że należy zmienić bieżącą wartość tożsamości.

new_reseed_value

Nowa wartość, która ma być używana jako bieżąca wartość kolumny tożsamości.

Z NO_INFOMSGS

Pomija wszystkie komunikaty informacyjne.

Uwagi

Określone poprawki wprowadzone w bieżącej wartości tożsamości zależą od specyfikacji parametrów.

DBCC CHECKIDENT , polecenie Korekta tożsamości lub wprowadzone poprawki
DBCC CHECKIDENT (<table_name>, NORESEED) Bieżąca wartość tożsamości nie jest resetowany. DBCC CHECKIDENT zwraca bieżącą wartość tożsamości i bieżącą maksymalną wartość kolumny tożsamości. Jeśli te dwie wartości nie są takie same, należy zresetować wartość tożsamości, aby uniknąć potencjalnych błędów lub luk w sekwencji wartości.
DBCC CHECKIDENT (<table_name>)

lub

DBCC CHECKIDENT (<table_name>, RESEED)
Jeśli bieżąca wartość tożsamości dla tabeli jest mniejsza niż maksymalna wartość tożsamości przechowywana w kolumnie tożsamości, zostanie zresetowana przy użyciu wartości maksymalnej w kolumnie tożsamości. Zobacz sekcję Wyjątki, która jest następująca.
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) Bieżąca wartość tożsamości jest ustawiona na wartość new_reseed_value. Jeśli nie wstawiono wierszy do tabeli od momentu utworzenia tabeli lub jeśli wszystkie wiersze zostały usunięte przy użyciu instrukcji TRUNCATE TABLE, pierwszy wiersz wstawiony po uruchomieniu polecenia DBCC CHECKIDENT używa new_reseed_value jako tożsamości. Jeśli wiersze są obecne w tabeli lub jeśli wszystkie wiersze zostały usunięte przy użyciu instrukcji DELETE, następny wiersz wstawiony używa new_reseed_value + bieżącej wartości przyrostowej. Jeśli transakcja wstawia wiersz i zostanie później wycofana, następny wiersz wstawiony używa new_reseed_value + bieżącej wartości przyrostowej tak, jakby wiersz został usunięty. Jeśli tabela nie jest pusta, ustawienie wartości tożsamości na liczbę mniejszą niż wartość maksymalna w kolumnie tożsamości może spowodować powstanie jednego z następujących warunków:

— Jeśli w kolumnie tożsamości istnieje ograniczenie KLUCZ PODSTAWOWY lub UNIKATOWY, zostanie wygenerowany komunikat o błędzie 2627 podczas późniejszego wstawiania operacji do tabeli, ponieważ wygenerowana wartość tożsamości będzie powodować konflikt z istniejącymi wartościami.

— Jeśli klucz podstawowy lub ograniczenie UNIKATOWE nie istnieje, późniejsze operacje wstawiania spowodują zduplikowanie wartości tożsamości.

Wyjątki

W poniższej tabeli wymieniono warunki, gdy DBCC CHECKIDENT nie resetuje automatycznie bieżącej wartości tożsamości i zawiera metody resetowania wartości.

Warunek Metody resetowania
Bieżąca wartość tożsamości jest większa niż maksymalna wartość w tabeli. Wykonaj DBCC CHECKIDENT (<table_name>, NORESEED), aby określić bieżącą wartość maksymalną w kolumnie. Następnie określ wartość jako new_reseed_value w poleceniu DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>).

lub

Wykonaj DBCC CHECKIDENT (<table_name>, RESEED,<new_reseed_value>) z new_reseed_value ustawioną na niską wartość, a następnie uruchom DBCC CHECKIDENT (<table_name>, RESEED), aby poprawić wartość.
Wszystkie wiersze są usuwane z tabeli. Wykonaj DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) z new_reseed_value ustawioną na nową wartość początkową.

Zmienianie wartości inicjatora

Wartość inicjowana to wartość wstawiona do kolumny tożsamości dla pierwszego wiersza załadowanego do tabeli. Wszystkie kolejne wiersze zawierają bieżącą wartość tożsamości oraz wartość przyrostu, w której bieżąca wartość tożsamości jest ostatnią wartością tożsamości wygenerowaną dla tabeli lub widoku.

Nie można użyć DBCC CHECKIDENT dla następujących zadań:

  • Zmień oryginalną wartość inicjatora określoną dla kolumny tożsamości podczas tworzenia tabeli lub widoku.

  • Przesuń istniejące wiersze w tabeli lub widoku.

Aby zmienić oryginalną wartość inicjatora i ponownie utworzyć wszystkie istniejące wiersze, upuść kolumnę tożsamości i utworzyć ją ponownie, określając nową wartość inicjatora. Gdy tabela zawiera dane, numery tożsamości są dodawane do istniejących wierszy z określonymi wartościami inicjacji i przyrostu. Kolejność aktualizowania wierszy nie jest gwarantowana.

Zestawy wyników

Niezależnie od tego, czy określono jakiekolwiek opcje dla tabeli zawierającej kolumnę tożsamości, DBCC CHECKIDENT zwraca następujący komunikat dla wszystkich operacji z wyjątkiem jednej. Ta operacja określa nową wartość inicjatora.

Sprawdzanie informacji o tożsamości: bieżąca wartość tożsamości "<bieżąca wartość tożsamości>", bieżąca wartość kolumny "<bieżąca wartość kolumny>". Ukończono wykonywanie polecenia DBCC. Jeśli komunikaty o błędach wydrukowane w bazie danych DBCC, skontaktuj się z administratorem systemu.

Gdy DBCC CHECKIDENT służy do określania nowej wartości inicjowania przy użyciu RESEED <new_reseed_value>, zwracany jest następujący komunikat.

Sprawdzanie informacji o tożsamości: bieżąca wartość tożsamości "<bieżąca wartość tożsamości>". Ukończono wykonywanie polecenia DBCC. Jeśli komunikaty o błędach wydrukowane w bazie danych DBCC, skontaktuj się z administratorem systemu.

Uprawnienia

Obiekt wywołujący musi być właścicielem schematu zawierającego tabelę lub być członkiem sysadmin stałej roli serwera, stałej roli bazy danych db_owner lub stałej roli db_ddladmin stałej bazy danych.

Usługa Azure Synapse Analytics wymaga db_owner uprawnień.

Przykłady

A. Zresetuj bieżącą wartość tożsamości, jeśli jest to potrzebne

Poniższy przykład resetuje bieżącą wartość tożsamości, jeśli jest wymagana, określonej tabeli w bazie danych AdventureWorks2022.

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

B. Zgłaszanie bieżącej wartości tożsamości

Poniższy przykład zgłasza bieżącą wartość tożsamości w określonej tabeli w bazie danych AdventureWorks2022 i nie poprawia wartości tożsamości, jeśli jest niepoprawna.

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

C. Wymuszanie wartości bieżącej tożsamości na nową wartość

Poniższy przykład wymusza wartość bieżącej tożsamości w kolumnie AddressTypeID w tabeli AddressType na wartość 10. Ponieważ tabela ma istniejące wiersze, wstawiony następny wiersz będzie używać wartości 11 jako wartości. Nowa bieżąca wartość tożsamości zdefiniowana dla kolumny plus 1 (czyli wartość przyrostowa kolumny).

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

D. Resetowanie wartości tożsamości w pustej tabeli

W poniższym przykładzie przyjęto założenie, że tożsamość tabeli (1, 1) i wymusza bieżącą wartość tożsamości w kolumnie ErrorLogID w tabeli ErrorLog do wartości 1 po usunięciu wszystkich rekordów z tabeli. Ponieważ tabela nie ma istniejących wierszy, następny wiersz wstawiony będzie używać wartości 1 jako wartości, czyli nowej bieżącej wartości tożsamości bez dodawania wartości przyrostowej zdefiniowanej dla kolumny po truNCATE lub dodawania wartości przyrostowej 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

Zobacz też