
Когато става въпрос за управление на бази данни, може да се натъкнете на сценарии, при които се изисква нулиране на стойности за самоличност на автоматично нарастване; Microsoft SQL Server не е изключение. Стойностите за идентичност са генерирани от системата числа за уникална идентификация на редове в таблица, използвани предимно за целите на първичния ключ. Понякога, по време на жизнения цикъл на базата данни, записите се изтриват, а в някои случаи цели таблици се изчистват, оставяйки пропуски в стойностите на самоличността. Когато постъпват нови данни, за да заменят старите, може да е желателно да нулирате стойностите на самоличността, за да поддържате последователен ред. В SQL Server това се извършва с помощта на командата DBCC CHECKIDENT.
DBCC CHECKIDENT ('your_table', RESEED, 0);
DBCC CHECKIDENT Обяснено
DBCC CHECKIDENT е команда на конзолата на базата данни (DBCC), която се използва специално за нулиране на стойности за самоличност. Параметрите за тази команда са доста ясни.
След като напишете DBCC CHECKIDENT, предавате името на таблицата – това е таблицата, за която искате да нулирате стойностите за самоличност. След това използвайте ключовата дума „RESEED“, за да уведомите SQL Server, че искате да нулирате стойностите. Последният параметър е числото, към което искате да заредите стойността на самоличността. Ако искате следващата вмъкната стойност за идентичност да бъде 1, вие задавате стойността за повторно зареждане на 0. Следващата автоматично генерирана стойност за идентичност винаги е с една повече от стойността за повторно зареждане.
За ясна демонстрация обмисляте да имате таблица с име „Поръчки“ със записи със стойности на идентичност съответно 1, 2 и 3-
SELECT * FROM Orders; 1 | Order1 | 2019-11-01 2 | Order2 | 2019-11-03 3 | Order3 | 2019-11-05
Приложение стъпка по стъпка DBCC CHECKIDENT
По същество нека приемем, че изтриваме 3-тия запис и искаме следващата ни поръчка да има идентификатор на поръчка 3. Ще заредим отново таблицата с поръчки:
DBCC CHECKIDENT ('Orders', RESEED, 2);
Тази команда ще накара следващия вмъкнат запис да има стойност на идентичност 3.
Разбиране на пропуските при повторно зареждане
Важен факт, който трябва да се отбележи, е, че DBCC RESEED не засяга съществуващите записи. Например, в ситуация, в която записите са изтрити, повторното зареждане е практично за запълване на празнини. Въпреки това може да бъде противоречиво, ако се извърши, когато таблицата все още има записи. Причината е, че ако зададената стойност за повторно зареждане е по-малка от текущата максимална стойност на идентичност в таблицата, това би довело до дублиране на стойности на идентичност при вмъкване на нови записи, което е контрапродуктивно.
В обобщение, функцията RESEED на SQL Server е мощен инструмент, който помага при управлението на стойността на идентичността. Трябва да се използва внимателно, за да се поддържа целостта на базата данни и да се възползват от предимствата му.
Общи функции, свързани с DBCC CHECKIDENT
Ето някои общи функции, свързани с DBCC CHECKIDENT:
- SCOPE_IDENTITY(): Връща последната стойност за самоличност, вмъкната в колона за идентичност в същия обхват.
- @@ИДЕНТИЧНОСТ: Това е системна функция, която връща последната въведена стойност за идентичност.
- IDENT_CURRENT(): Тази функция връща последната стойност за самоличност, генерирана за конкретна таблица във всяка сесия и всеки обхват.
Ефективното използване на тези инструменти може значително да улесни усилията ви за управление на бази данни и да подобри производителността на вашите бази данни на SQL Server. Важно е да се запознаем с тези функции, тъй като те са основни в управлението на бази данни на SQL Server.