Gdy tabela posiada kolumnę określona jako IDENTITY, to wartości dla tej kolumny sa generowane automatycznie. Czasami jednak po pewnych operacjach na tabeli chciałbyś uruchomić numerowanie IDENTITY od poczatku. Jak to zrobić? Zobacz przykład:
CREATE TABLE TestIdentity(Id INT IDENTITY,
Name VARCHAR(100)); INSERT INTO TestIdentity VALUES (’a’),(’b’),(’c’) SELECT * FROM TestIdentity
Id Name ----------- ---------- 1 a 2 b 3 c
(3 row(s) affected)
Kiedy kasujesz rekordy z takiej tabeli okazuje się, że nadawane s im numery z zachowaniem wcześniej użytych np.
DELETE FROM TestIdentity INSERT INTO TestIdentity VALUES (’d’),(’e’),(’f’) SELECT * FROM TestIdentityId Name ----------- ----------
4 d 5 e 6 f
(3 row(s) affected)
Jeżeli chcesz aby numeracja znowu zaczęła się od jedynki uzyj funkcji DBCC CHECKIDENT. Najpierw jednak wykasujmy niepotrzebne rekordy (nie jest to konieczne, ale przykład będzie łatwiej analizować):
DELETE FROM TestIdentityTeraz przestawiamy IDENTITY na „od zera”.
DBCC CHECKIDENT(TestIdentity, RESEED, 0)Polecenie zmienia wartość, od której będzie generować nowe wartości IDENTITY i wyświetla na ten temat komunikat diagnostyczny:
Checking identity information: current identity value '6', current column value '0'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Jeżeli teraz wstawisz nowe rekordy:
INSERT INTO TestIdentity VALUES (’g’),(’h’),(’i’)SELECT * FROM TestIdentity
Id Name ----------- ---------- 1 g 2 h 3 i
(3 row(s) affected)
Jeżeli tabela nie jest połaczona z innymi tabelami poprzez klucze obce, a twoim celem jest wykasować wszystkie rekordy i ustawić IDENTITY na 1, to możesz się również posłużyć poleceniem TRUNCATE TABLE. Truncate table zwraca cały obszar dysku do bazy danych i ustawia INENTITY tak, że numeracja rozpocznie się od poczatku:
TRUNCATE TABLE TestIdentityINSERT INTO TestIdentity VALUES (’j’),(’k’),(’l’)
SELECT * FROM TestIdentity
Id Name ----------- ---------- 1 j 2 k 3 l
(3 row(s) affected)