Повторно использовать значение идентичности после удаления строк - PullRequest
14 голосов
/ 26 ноября 2010

Можно ли повторно использовать значение поля идентификатора после удаления строк в SQL Server 2008 Express? Вот пример. Предположим, у меня есть таблица с полем Id в качестве первичного ключа (идентификатор). Если я добавлю пять строк, у меня будет 5 идентификаторов: 1, 2, 3, 4, 5. Если бы я удалил эти строки, а затем добавил еще пять, новые строки имели бы идентификаторы: 6, 7, 8 9, 10. Можно ли позволить ему начать сначала с 1?

Нужно ли удалять данные из другой таблицы, чтобы этого добиться? Спасибо за вашу помощь.

Ответы [ 3 ]

21 голосов
/ 26 ноября 2010

Вы можете использовать следующее для установки значения IDENTITY:

DBCC CHECKIDENT (orders, RESEED, 999)

Это означает, что вам придется запускать оператор на основе каждого DELETE.Это должно начать подчеркивать, почему это плохая идея ...

База данных не заботится о последовательных значениях - это только для представления.

9 голосов
/ 26 ноября 2010

Если вы хотите сбросить идентификатор после удаления всех строк, выполните одну из этих

--instead of delete, resets identity value
TRUNCATE TABLE orders

--or if TRUNCATE fails because of FKs, use this after DELETE
DBCC CHECKIDENT (orders, RESEED, 1)

В противном случае внутреннее значение не должно иметь значения, пробелы или нет.

6 голосов
/ 26 ноября 2010
Поля

identity не используют старые значения по умолчанию.Вы можете повторно заполнить их с помощью dbcc checkident, но это не рекомендуется, так как вы получите ключевые нарушения, если вы перезапустите ниже значения, которое все еще существует в таблице.В общем, вам не важно, каковы значения PK.Тот факт, что они не являются смежными, ничего не повредит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...