Kontrola i zmiana ustawionego IDENTITY

Niekiedy zdarza się, że chcemy sprawdzić jaka będzie wartość w polu z ustawioną właściwością IDENTITY po dodaniu nowego rekordu. Często też zdarza się sytuacja, że musimy wartość zmienić.

W celu rozwiązania tego problemu należy użyć polecenia DBCC CHECKIDENT. Przykład skryptu przedstawionego poniżej:

DBCC CHECKIDENT ('dbo.Test’, NORESEED)

W odpowiedzi uzyskuje się komunikat:

Checking identity information: current identity value '9', current column value '9'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Komunikat ten nas informuje, że w tabeli dbo.Test aktualna wartość dla pola z właściwościa IDENTITY ustawiona jest na 9.

Jak zmienić wartość IDENTITY:

Należy użyć polecenia DBCC CHECKIDENT. Przykład skryptu przedstawionego poniżej:

DBCC CHECKIDENT ('dbo.Test’, RESEED,50) <code>--gdzie 50 to nowa wartość

W odpowiedzi uzyskuje się komunikat:

Checking identity information: current dentity value '9', current column value '50'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Uwaga:

1) Należy uważać, aby nie podać wartości już użytej, czyli mniejszej od istniejącego ustawionego IDENTITY, przykładowo:

DBCC CHECKIDENT ('dbo.TEST', RESEED,6) -- poprzednia wartość to 9 

Skrypt zostanie wykonany bezbłędnie ale próba dodania nowego rekordu skutkuje błędem:

Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK_TEST'. Cannot insert duplicate key in object 'dbo.TEST'.
The duplicate key value is (7). The statement has been terminated.

Oczywiście naprawiamy taka sytuacje ustawiając znów prawidłową wartość:

DBCC CHECKIDENT ('dbo.TEST', RESEED,9)

2) Użycie:

DBCC CHECKIDENT ('dbo.TEST', RESEED,50)  

Lub

DBCC CHECKIDENT ('dbo.TEST', NORESEED)

Dla tabeli, która nie ma ustawionej właściwości IDENTITY spowoduje błąd:

Msg 7997, Level 16, State 1, Line 2
'TEST' does not contain an identity column.

Linki:

DBBS