Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных int
Ошибка арифметического переполнения при преобразовании IDENTITY в тип данных int возникает при запуске через код vb. Но когда я выполняю хранимую процедуру, данные вставляются правильно.
Через приложение также иногда это работает, а иногда нет.
Когда я проверяю текущее значение идентичности и текущие значения столбца разные. Это подпадает под вопрос.
Пожалуйста, дайте мне знать, как решить это.
4 ответа
Пожалуйста, НЕ используйте
DBCC CHECKIDENT('dbo.TableName',reseed,0)
//or
DBCC CHECKIDENT('dbo.TableName')
чтобы устранить эту проблему, как это сделал я. Это заставит базу данных переустановить ваши личности.
Пожалуйста, используйте это
DBCC CHECKIDENT('dbo.TableName',NORESEED)
Он покажет, находится ли ваша таблица на максимуме для значений int. Максимальное значение int равно
2,147,483,647
.
2147483647
Максимальный размер для INT
так где-то ваш IDENTITY
больше, чем это. Ты можешь использовать BIGINT
вместо этого, чтобы обойти вашу ошибку, предполагая, что ваш IDENTITY
не превзойдет 9223372036854775807
,
Как уже говорили другие, ваш столбец больше допустимого диапазона для типа.
Вы могли бы повторно использовать, используя DBCC CHECKIDENT('dbo.TableName',reseed,0)
как уже говорили другие, но это может привести к ошибкам, если вы попытаетесь повторно использовать уже использованное значение.
Предполагая, что столбец является столбцом идентификатора с автоматическим приращением, а количество строк меньше, чем диапазон типов данных, вы можете переустановить все значения.
- Создать резервную таблицу
- Вставьте все записи в резервную таблицу
- Усеченный оригинальный стол
- Вставьте все записи из резервной таблицы
- Удалить резервную таблицу
Это будет зависеть от ваших ограничений и может быть сложнее, чем оно того стоит.
Вы можете использовать это:
DBCC CHECKIDENT('dbo.TableName',reseed,0)
это повторно к 0.
Какую версию VB вы используете? Используете ли вы тип переменной 'long' для увеличения возвращаемого значения? В VB 6 и ранее int имеет очень ограниченные значения, а в.net он по-прежнему ограничен только 10-значными числами.
Я хотел бы убедиться, что вы используете "длинный" в VB