2015-11-05 2 views
0

У меня есть столбец идентификатора, который имеет столбец идентификаторовSQL идентичность вопрос

CREATE TABLE EMP 
(id int primary key identity(1,1), 
name varchar(255)); 

Проблема в том, что после того, как 10 его дает значение 111, то 112 почему он не дает 11

+2

Это зависит от того, что вы с ним сделаете. откат каких-либо транзакций? удалить записи? –

+0

Приращения идентичности включают удаленные записи. Поэтому, если вы добавили 100 записей в эту таблицу, затем удалите их, следующая вставка будет иметь идентификатор 101. Вы можете сбросить его с помощью DBCC CHECKIDENT. –

+0

Нет, я просто вставляю одну колонку после 10, она дает 111 почему? –

ответ

0

Независимо от причины, вы можете восстановить свой столбец идентификации с помощью команды DBCC CHECKIDENT.

Он принимает параметры, позволяющие сбросить значение до того, что вы хотите. Например это:

DBCC CHECKIDENT ('[TableNameHere]', RESEED, 11) 

сбросит столбец 11 - вы можете заменить любой номер необходим в качестве конечного параметра.

Использование TRUNCATE TABLE также сбросит все столбцы идентификации, но оно также будет удалять все ваши данные. Использование DELETE приведет к удалению данных, но оно не изменит значения идентификатора.

2

Это зависит от того, как вы вставляя данные в него. Если это просто INSERT INTO и ничего больше, это странно.

Возможно, это проблема с сервером MSSQL 2012? Когда сервер перезагружается, появляется ошибка об ошибке идентификации.

Более подробная информация http://www.codeproject.com/Tips/668042/SQL-Server-Auto-Identity-Column-Value-Jump-Is

+1

Ничего себе, 20 лет было достаточно для MS, чтобы следить за Oracle и рекомендует использовать последовательность вместо идентификации. Сколько раз я слышал, что личность намного лучше, и последовательность не нужна. –

+0

Это не ошибка, это по дизайну, чтобы сделать ее эффективной. Сервер выделяет блок идентификационных номеров заранее (кэширует их), а не выделяет их один за другим. Объект Sequence позволяет явно включать и выключать кеш. –

+0

Кто-то называет это как функцию, кто-то как ошибка :-), да, я прочитал отчет об ошибке https://connect.microsoft.com/SQLServer/feedback/details/739013/failover-or-restart-results- в-Reseed-о-идентичности – krtek

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