Значение повторного использования после удаления строк
Можно ли повторно использовать значение поля идентификатора после удаления строк в SQL Server 2008 Express? Вот пример. Предположим, что у меня есть таблица с полем Id как первичный ключ (идентификатор). Если я добавлю пять строк, у меня будут эти 5 идентификаторов: 1, 2, 3, 4, 5. Если бы я должен был удалить эти строки, а затем добавить еще пять, новые строки будут иметь идентификаторы: 6, 7, 8, 9, 10. Можно ли снова начать его с 1?
Нужно ли мне удалять данные из другой таблицы, чтобы это сделать? Благодарим за помощь.
Ответы
Ответ 1
Чтобы установить значение IDENTITY, вы можете использовать следующее:
DBCC CHECKIDENT (orders, RESEED, 999)
Это означает, что вам нужно будет запустить инструкцию на основе каждого DELETE. Это должно начать подчеркивать, почему это плохая идея...
База данных не заботится о последовательных значениях - только для представления.
Ответ 2
Если вы хотите reset личность после удаления всех строк, выполните одно из этих
--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)
В противном случае внутреннее значение не должно иметь значения, являются ли пробелы или нет.
Ответ 3
Поля identity
по умолчанию не используют старые значения. Вы можете переместить их с помощью dbcc checkident
, но это не рекомендуется, так как вы получите ключевые нарушения, если вы переместитесь ниже значения, которое все еще существует в стол. В общем, вам все равно, какие значения PK. Тот факт, что они не соприкасаются, ничего не болит.