2017-01-26 3 views
1

Я работаю с таблицей с ПК с типом данных INT. Колонка имеет «Идентичность Приращение» установлена ​​1 и «идентичность» Семя набора 1.Ошибка SQL Server Арифметическая ошибка переполнения IDENTITY для типа данных int, но не достигнута max int

Я пытаюсь сделать вставку и получить следующее сообщение об ошибке:

Msg 8115, Level 16, State 1, Line 3 
Arithmetic overflow error converting IDENTITY to data type int. 
Arithmetic overflow occurred. 

Когда я запускаю следующее видеть то, что Макс идентификатор я получаю 1702747645:

SELECT Max(Id) FROM Log_Records 

Int, предполагают, чтобы иметь крышку 2,147,483,647, так что я задаюсь вопросом, почему я могу получать эту ошибку?

+0

Ваш запрос можно улучшить. 'SELECT TOP 1 Id FROM Log_Records ORDER BY Id DESC' или' SELECT Max (Id) FROM Log_Records' были бы лучше, чем то, что вы написали. Кроме того, трудно сказать, что может быть неправильно с вашим INSERT, потому что вы не указали SQL, который используете для этого. –

+0

Только что изменил это спасибо, результат остается тем же. – MilesMorales

ответ

3

Try работает DBCC CHECKIDENT('Log_Records', NORESEED);

В этом сообщит текущее значение идентификатора в указанной таблице. Следующее значение идентификатора необязательно последовательное с максимальным значением в таблице, например, если у вас есть транзакции, которые откатились.

+0

Отличный запрос. Это результат: Проверка идентификационной информации: текущее значение идентификации «2147483647», текущее значение столбца «1702747645». DBCC исполнение завершено. Если DBCC печатал сообщения об ошибках, обратитесь к системному администратору. Таким образом, значение ниже, чем int cap, но я предполагаю, что следующее значение приращения не учитывает max, а какое его число равно? – MilesMorales

+1

'current identity value '2147483647'' указывает, что следующее вставленное значение переполнит INT. Ниже приведено более подробное описание поведения столбцов IDENTITY: https://msdn.microsoft.com/en-us/library/ms186775.aspx –

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