Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Поправете „Грешка при аритметично препълване при преобразуване на int в числови тип данни“ в SQL Server

Ако получавате грешка Съобщение 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 за това как да поправите това.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MultipleActiveResultSets=Истински или множество връзки?

  2. Срокове за събиране на аларми от Spotlight Cloud

  3. В SQL Server, как мога да намеря навсякъде, където има препратка към колона?

  4. 4 начина за изброяване на всички изгледи в база данни на SQL Server

  5. SQL Server 2008 - подреждане по низове с числово число