Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL database w usłudze Microsoft Fabric
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.
Ten artykuł oraz składnia IDENTITY różnią się na różnych platformach SQL Database Engine. Aby Microsoft Fabric Data Warehouse, wybierz Fabric Data Warehouse w rozwijanej liście wersji.
Transact-SQL konwencje składni
Składnia
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 ]
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. Tabela, którą wybierasz, musi zawierać kolumnę tożsamości. Nazwy tabel muszą być zgodne z regułami dotyczącymi identyfikatorów . Używaj ograniczników dla nazw dwu- lub trzyczęściowych, takich 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
Konkretne korekty wprowadzane DBCC CHECKIDENT do aktualnej 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, zresetuj 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 aktualna wartość tożsamości dla tabeli jest mniejsza niż maksymalna wartość tożsamości zapisana w kolumnie tożsamości, resetuje ją, DBCC CHECKIDENT używając maksymalnej wartości 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 od momentu utworzenia tabeli nie zostaną wstawione żadne wiersze lub wszystkie wiersze zostaną usunięte za pomocą TRUNCATE TABLE instrukcji, pierwszy wiersz wstawiony po uruchomieniu DBCC CHECKIDENT służy new_reseed_value jako tożsamość. Jeśli w tabeli występują wiersze lub wszystkie wiersze zostaną usunięte za pomocą DELETE tego polecenia, następny wiersz wstawiony używa new_reseed_value wartości + aktualnej wartości przyrostu . Jeśli transakcja wstawia wiersz i jest później cofana do tyłu, kolejny wiersz wstawia + new_reseed_value bieżącą wartość przyrostu , 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 na kolumnie identyczności istnieje ograniczenie PRIMARY KEY al UNIQUE , przy późniejszych operacjach wstawiania do tabeli generowany jest komunikat o błędzie 2627, ponieważ wygenerowana wartość tożsamości koliduje z istniejącymi wartościami.- Jeśli ograniczenie lub PRIMARY KEYUNIQUE nie istnieje, późniejsze operacje wstawiania skutkują duplikacjami 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 aktualną wartość tożsamości, jeśli jest to potrzebne, dla określonej tabeli w bazie danych.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Zgłaszanie bieżącej wartości tożsamości
Poniższy przykład raportuje aktualną wartość tożsamości dla określonej tabeli w bazie danych i nie koryguje wartości tożsamości, jeśli jest nieprawidłowa.
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 AddressType aktualną wartość tożsamości kolumny AddressTypeID w tabeli do wartości 10. Ponieważ tabela zawiera istniejące wiersze, kolejny wiersz wstawiony używa wartości 11. Nowa aktualna wartość tożsamości zdefiniowana dla kolumny plus 1 to wartość przyrostu kolumny.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D. Resetowanie wartości tożsamości w pustej tabeli
Poniższy przykład zakłada tożsamość tabeli i (1, 1) wymusza aktualną wartość tożsamości dla kolumny ErrorLogID w tabeli ErrorLog do wartości 1, po usunięciu wszystkich rekordów z tabeli. Ponieważ tabela nie zawiera istniejących wierszy, kolejny wstawiony wiersz używa wartości 1. Nowa aktualna wartość tożsamości bez dodawania wartości przyrostu zdefiniowanej dla kolumny po TRUNCATE lub dodawania wartości przyrostu 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
Treści powiązane
Dotyczy:Warehouse w usłudze Microsoft Fabric
Ponownie nasiewają wartość tożsamościową tabeli w Fabric Data Warehouse. Użyj DBCC CHECKIDENT po wstawieniu wartości jawnych z do SET IDENTITY_INSERT wyrównania zakresów tożsamości i zapobiegania konfliktom z przyszłymi automatycznie generowanymi wartościami.
Ten artykuł oraz składnia IDENTITY różnią się na różnych platformach SQL Database Engine.
Transact-SQL konwencje składni
Składnia
DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )
Argumenty
table_name
Nazwa tabeli, dla której należy ponownie zasiewać wartość tożsamości. Tabela musi zawierać kolumnę tożsamości. Nazwy tabel mogą zawierać nazwę schematu, na przykład lub 'dbo.DimCustomer''[dbo].[DimCustomer]'.
RESEED
Słowo RESEED kluczowe jest opcjonalne, ale DBCC CHECKIDENT zawsze wykonuje operację ponownego seedu. Dodanie lub pominięcie opcji daje te same rezultaty.
Słowo RESEED kluczowe instruuje Database Engine do przeskanowania wszystkich używanych i zarezerwowanych zakresów tożsamości oraz ustawienia kolejnej wartości tożsamości, aby uniknąć konfliktów z istniejącymi wartościami. W Fabric Data Warehouse wykonuje RESEED skanowanie uwzględniające zasięg wszystkich rozproszonych węzłów obliczeniowych, aby określić poprawną kolejną wartość.
Uwagi
- W Fabric Data Warehouse jedynym argumentem, który to wspiera,
DBCC CHECKIDENTjestRESEEDopcja, którą zawsze wykonuje. System automatycznie określa poprawne zakresy wartości kolejnej tożsamości na podstawie istniejących danych. Nie możesz określić niestandardowej wartości reseedu. - Zawsze uruchamiaj
DBCC CHECKIDENTpo użyciuIDENTITY_INSERTdo wstawiania wartości jawnych. Ta operacja zapewnia, że przyszłe automatycznie generowane wartości nie kolidują z ręcznie wprowadzanymi wartościami. - W Fabric Data Warehouse nie jest obsługiwane określanie niestandardowego
new_reseed_valueustawienia. Próba podania wartości zwraca następujący błąd:Specifying a custom seed in Fabric Data Warehouse is not supported. -
DBCC CHECKIDENTzdobywa blokady, które mogą blokować jednoczesne operacje DML i DDL. Aby zminimalizować zakłócenia, wykonuj polecenie w izolacji, gdy inne procesy nie korzystają aktywnie z tabeli.
Uprawnienia
Musisz być właścicielem stołu lub mieć ALTER na niego pozwolenie.
Przykłady
A. Ponowne seedowanie po wstawieniu wartości sentinelowych
Po wypełnieniu wartości sentinel w tabeli wymiarowej za pomocą SET IDENTITY_INSERT, ponownie zasiewaj kolumnę tożsamości, aby zapobiec kolizji automatycznie generowanych wartości w przyszłości z ręcznie wprowadzonymi wartościami.
-- 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. Ponowne siew po migracji masowej
Po migracji danych historycznych z wyraźnymi wartościami tożsamości, ponownie zasiewaj tabelę, aby upewnić się, że nowe wiersze nie pokrywają się z przeniesionymi danymi.
-- 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 za pomocą IDENTITY_INSERT
Po załadowaniu danych z COPY INTO while IDENTITY_INSERT is ON, ponownie zasiedzi kolumnę tożsamości.
COPY INTO Opcje nadpisują dowolne ustawienia na poziomie sesji dla 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 słowa kluczowego RESEED
Słowo RESEED kluczowe jest opcjonalne, ale DBCC CHECKIDENT zawsze wykonuje operację ponownego seedu. Dodanie lub pominięcie opcji daje te same rezultaty.
-- Reseed without the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore');
-- Reseed with the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore', RESEED);