У меня есть таблица с полем, которое увеличивается. Значения для этого поля 1, 2, 3...60
, а затем поле 1060
.
Я не знаю почему?
Следующее значение id должно быть 61
.
У меня есть таблица с полем, которое увеличивается. Значения для этого поля 1, 2, 3...60
, а затем поле 1060
.
Я не знаю почему?
Следующее значение id должно быть 61
.
Это новая функция SQL Server 2012. Столбцы идентификаторов используют Sequences
и значения по умолчанию кэшируются для ускорения вставки новых строк. Когда происходит незапланированное выключение SQL Server, кеш теряется, и значения идентификаторов продолжают создаваться с промежутком (обычно 1000 или 10000).
Причин может быть несколько, некоторые из наиболее вероятных:
DBCC CHECKIDENT ({table}, RESEED, {value});
SET IDENTITY_INSERT ON
Поля автоинкремента не гарантированно будут последовательными. Они гарантированно будут уникальными. Если вам нужно, чтобы они были последовательными, я бы рекомендовал самостоятельно отслеживать следующий идентификатор, что потребует от вас подумать о параллелизме, ссылках на внешние ключи и т. Д.
Я предполагаю, что вы имеете в виду поле IDENTITY с шагом 1. Это увеличивает значение на 1 каждый раз, когда вставляется новая запись.
Цитировать:
Если столбец идентификаторов существует для таблицы с частыми удалениями, между значениями идентификаторов могут возникать пробелы. Если это вызывает беспокойство, не используйте свойство IDENTITY. Однако, чтобы убедиться, что не было создано никаких пробелов или чтобы заполнить существующий пробел, оцените существующие значения идентичности, прежде чем явно вводить их с помощью SET IDENTITY_INSERT ON.
Как упоминалось в комментариях, вероятно, в этой таблице когда-то были данные, заполненные всеми пропущенными значениями, но они были удалены. (Поскольку это довольно большой кусок, возможно, это было сделано оптом?)
IDENTITY
всегда имеет непрерывную цепочку целочисленных значений, я боюсь, что вы используете его не для той цели.IDENTITY
поля являются суррогатными ключами и поэтому не имеют реального значения. - person gvee   schedule 20.08.2013