Ако получавате грешка Съобщение 8115, ниво 16, грешка при аритметично препълване при преобразуване на int в числови тип данни в SQL Server вероятно е защото изпълнявате операция, която води до грешка при преобразуване на данни поради стойност извън диапазона.
Това често се случва, когато се опитате да преобразувате число в различен тип данни, но то е извън приетия диапазон за новия тип данни.
Пример за грешката
Ето пример за код, който създава грешката:
SELECT CAST(275 AS DECIMAL(3, 2));
Резултат:
Msg 8115, Level 16, State 8, Line 1 Arithmetic overflow error converting int to data type numeric.
В този случай се опитвах да преобразувам цяло число в десетичен знак.
Но моята грешка е, че разреших само точност от 3 за получената десетична стойност. Тази прецизност не е достатъчна за стойността, която би била произведена от тази операция (която би била 275.00
).
Решението
Проблемът се отстранява лесно:
SELECT CAST(275 AS DECIMAL(5, 2));
Резултат:
275.00
Всичко, което направих, беше да увеличим аргумента за прецизност до по-достатъчна стойност.
По-конкретно го увеличих от 3
до 5
.
Ако очаквах да се появят по-големи цели числа (например, ако цялото число е в колона на база данни), тогава ще трябва да увелича прецизността, за да може да обработва по-големите стойности.
Само за да бъде ясно, прецизността е максималният общ брой десетични цифри, които трябва да бъдат съхранени. Това число включва както лявата, така и дясната страна на десетичната запетая. Прецизността трябва да бъде стойност от 1
чрез максималната точност от 38
. Прецизността по подразбиране е 18
.
Една и съща грешка в различни сценарии
Същата грешка (Msg 8115) може да възникне (с малко по-различно съобщение за грешка), когато използвате функция като SUM()
върху колона и изчислението води до стойност, която е извън диапазона на типа на колоната. Вижте Коригиране на „Грешка при аритметично препълване при преобразуване на израз в тип данни int“ в SQL Server, за да коригирате това.
И същата грешка (Msg 8115) може да възникне (с малко по-различно съобщение за грешка), когато се опитате да вмъкнете данни в таблица, когато нейният IDENTITY
колоната е достигнала ограничението за своя тип данни. Вижте Поправка:„Грешка при аритметично препълване при преобразуване на IDENTITY
към тип данни...” в SQL Server за това как да поправите това.