У меня есть таблица со столбцом IDENTITY. В процессе разработки я время от времени удаляю строки и добавляю их снова. Но значения IDENTITY всегда увеличивались и не начинались с 1, когда я снова их добавлял. Теперь мой идентификатор идет от 68 -> 92, и это приводит к сбою моего кода.
Как мне сбросить значение IDENTITY?
Ответы:
Вы можете сбросить значение идентичности с помощью
Поэтому в следующий раз при вставке в TableName значение идентификатора будет равно 1.
Когда вы удаляете строки из таблицы, он не будет сбрасывать значение Identity, но будет продолжать увеличивать его. Так же, как то, что произошло в вашем случае.
Теперь, когда вы усекаете таблицу, она сбрасывает значение Identity к исходному значению Seed таблицы.
Обратитесь к: SQL SERVER - DELETE, TRUNCATE и RESEED Identity для подробного примера и хорошего объяснения различий между усечением и удалением
источник
Кин показал вам, как вы можете сбросить значение IDENTITY, но за пределами среды разработки, когда вы действительно удаляете все данные, зачем вам это нужно?
Я надеюсь, что вы не собираетесь поддерживать непрерывную последовательность значений IDENTITY во время работы. И я надеюсь, что вы на самом деле не пишете свой код для жесткого кодирования значений IDENTITY. Если это значимые значения идентификаторов, вам следует прекратить использование свойства IDENTITY.
Есть несколько вещей, которые предотвратят это:
которая не будет исправлена до тех пор, пока SQL Server 2014никогда не будет исправлен (если только вы не используете недокументированный и очень дорогой флаг трассировки), в результате чего при перезапуске будет отбрасываться до 1000 значений из столбца IDENTITY. , Ошибка в Connect предполагает, что это ограничено событиями отработки отказа, связанными с группами доступности, но я могу заверить вас, что ошибка намного более обширна, чем эта.Короче говоря, если вы заботитесь о пробелах или хотите придать этим значениям особое значение, прекратите использовать IDENTITY. Удалите и заново создайте таблицу, а когда вам нужно удалить значения и заново заполнить, либо выполните обновление, либо выполните вставку с жестко заданными значениями для этого столбца.
Кроме того, первичный ключ и идентичность не одно и то же. Столбец идентификации не является первичным ключом, если вы явно не определите его как таковой, и у вас может быть первичный ключ, который не является столбцом идентификации.
источник
Если вам нужно удалить только последние строки, которые не следовали за инкрементным значением поля идентификации, есть простой и безопасный способ:
и вы сделали.
источник