Вопросы об операторе инкремента

У меня есть таблица с полем, которое увеличивается. Значения для этого поля 1, 2, 3...60, а затем поле 1060.

Я не знаю почему?

Следующее значение id должно быть 61.


person user2645263    schedule 20.08.2013    source источник
comment
Вы удаляли какие-либо данные из таблицы? Если вы это сделали, вам может потребоваться повторно установить удостоверение личности.   -  person Taryn    schedule 20.08.2013
comment
возможный дубликат Сбросить автоинкремент в SqlServer после удаления   -  person Taryn    schedule 20.08.2013
comment
Если вы полагаетесь на то, что ваше поле IDENTITY всегда имеет непрерывную цепочку целочисленных значений, я боюсь, что вы используете его не для той цели. IDENTITY поля являются суррогатными ключами и поэтому не имеют реального значения.   -  person gvee    schedule 20.08.2013
comment


Ответы (3)


Это новая функция SQL Server 2012. Столбцы идентификаторов используют Sequences и значения по умолчанию кэшируются для ускорения вставки новых строк. Когда происходит незапланированное выключение SQL Server, кеш теряется, и значения идентификаторов продолжают создаваться с промежутком (обычно 1000 или 10000).

person Nenad Zivkovic    schedule 20.08.2013

Причин может быть несколько, некоторые из наиболее вероятных:

  • 999 записей были удалены
  • 999 попыток вставки были неудачными
  • Что-то сбрасывает значение идентичности с помощью DBCC CHECKIDENT ({table}, RESEED, {value});
  • Что-то вставило запись с определенным идентификатором, используя SET IDENTITY_INSERT ON

Поля автоинкремента не гарантированно будут последовательными. Они гарантированно будут уникальными. Если вам нужно, чтобы они были последовательными, я бы рекомендовал самостоятельно отслеживать следующий идентификатор, что потребует от вас подумать о параллелизме, ссылках на внешние ключи и т. Д.

person D Stanley    schedule 20.08.2013

Я предполагаю, что вы имеете в виду поле IDENTITY с шагом 1. Это увеличивает значение на 1 каждый раз, когда вставляется новая запись.

Цитировать:

Если столбец идентификаторов существует для таблицы с частыми удалениями, между значениями идентификаторов могут возникать пробелы. Если это вызывает беспокойство, не используйте свойство IDENTITY. Однако, чтобы убедиться, что не было создано никаких пробелов или чтобы заполнить существующий пробел, оцените существующие значения идентичности, прежде чем явно вводить их с помощью SET IDENTITY_INSERT ON.

Как упоминалось в комментариях, вероятно, в этой таблице когда-то были данные, заполненные всеми пропущенными значениями, но они были удалены. (Поскольку это довольно большой кусок, возможно, это было сделано оптом?)

person Steve Chambers    schedule 20.08.2013