2013-04-11 2 views
-1

У меня есть таблица в моем db, чей идентификатор является int auto increment. Когда я создаю новую запись, все идет хорошо, идентификатор увеличивается на 1.Зазор между идентификаторами, которые автоинкрементны в db

Но сегодня я увидел большую дыру. Одна из записей имеет id = 56, а следующая - id = 1055.

Что может быть причиной этого. Мы не делали резервные копии на этом db.

+0

возможно дубликат [? Почему существует пробела в моих значениях столбца IDENTITY] (http://stackoverflow.com/questions/14642013/why-are-there-gaps-in-my -identity-column-values) – Pondlife

ответ

0

Есть несколько вещей, которые могут вызвать этот

  1. кто пересев стола, запустив DBCC CHECKIDENT
  2. кто-то вставил кучу строк и удалил их
  3. Партии строк была сделана попыткой вставить, партия не удалась, все откат, SQL Server не использует повторно тождеству значения

Также имейте в виду, что если вы удалите все строки с помощью инструкции DELETE, семя не будет восстановлено до 1, если вы TRUNCATE стол, то это

+0

Могу ли я как-нибудь проверить, был ли выполнен DBCC CHECKIDENT на этом db? –

+0

Не знаю, что я знаю – SQLMenace

0

Скорее всего, были некоторые ошибки при вставке или транзакции откаты. Значение идентификатора таблицы не зависит от транзакции. Например, даже если вы вставляете значение в таблицу и откатываете транзакцию, ваше значение отступов будет «оставаться увеличенным». Краткий пример для иллюстрации:

create table _test (
    id int identity (1,1) 
    ,txt varchar(2) 
) 
insert into _test(txt) 
select 'aa' as txt 

insert into _test(txt) 
select 'bb' as txt union all 
select 'ccc' 

GO 

insert into _test(txt) 
select 'dd' as txt 


select * from _test 
Смежные вопросы