Кин показал вам, как вы можете сбросить значение IDENTITY, но за пределами среды разработки, когда вы действительно удаляете все данные, зачем вам это нужно?
Я надеюсь, что вы не собираетесь поддерживать непрерывную последовательность значений IDENTITY во время работы. И я надеюсь, что вы на самом деле не пишете свой код для жесткого кодирования значений IDENTITY. Если это значимые значения идентификаторов, вам следует прекратить использование свойства IDENTITY.
Есть несколько вещей, которые предотвратят это:
- если значение IDENTITY назначено во время транзакции, и транзакция откатывается, значение не «возвращается», и следующее значение будет тем, которое никогда не использовалось + 1.
- если строка позже удаляется, IDENTITY никогда не возвращается, чтобы заполнить пробелы.
- в SQL Server 2012 существует активная ошибка,
которая не будет исправлена до тех пор, пока SQL Server 2014 никогда не будет исправлен (если только вы не используете недокументированный и очень дорогой флаг трассировки), в результате чего при перезапуске будет отбрасываться до 1000 значений из столбца IDENTITY. , Ошибка в Connect предполагает, что это ограничено событиями отработки отказа, связанными с группами доступности, но я могу заверить вас, что ошибка намного более обширна, чем эта.
Короче говоря, если вы заботитесь о пробелах или хотите придать этим значениям особое значение, прекратите использовать IDENTITY. Удалите и заново создайте таблицу, а когда вам нужно удалить значения и заново заполнить, либо выполните обновление, либо выполните вставку с жестко заданными значениями для этого столбца.
Кроме того, первичный ключ и идентичность не одно и то же. Столбец идентификации не является первичным ключом, если вы явно не определите его как таковой, и у вас может быть первичный ключ, который не является столбцом идентификации.