DBCC CHECKIDENT (Transact-SQL)
Dotyczy:sql Server
Azure SQL Database
Azure SQL Managed Instance
Azure 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