Значение повторного использования после удаления строк

Можно ли повторно использовать значение поля идентификатора после удаления строк в 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. Тот факт, что они не соприкасаются, ничего не болит.