2013-08-20 2 views
0

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

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

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

+1

Вы удалили данные из таблицы? Если вы это сделали, вам может потребоваться повторить идентификацию. – Taryn

+1

Возможный дубликат [Сбросить автоинкремент в SqlServer после удаления] (http://stackoverflow.com/questions/510121/reset-autoincrement-in-sqlserver-after-delete) – Taryn

+5

Если вы всегда полагаетесь на поле 'IDENTITY' имея непрерывную «цепочку» целочисленных значений, я боюсь, что вы используете ее не по назначению. Поля 'IDENTITY' являются ** суррогатными ключами ** и поэтому не имеют реального значения. – gvee

ответ

0

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

Цитирую:

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

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

1

Там может быть несколько причин - некоторые из наиболее вероятно:

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

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

3

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

Смежные вопросы