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

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

Ако получавате грешка Съобщение 8115, ниво 16, грешка при аритметично препълване при преобразуване на израз в тип данни int в SQL Server може да се окаже, че извършвате изчисление, което води до стойност извън диапазона.

Това може да се случи когато използвате функция като SUM() върху колона и изчислението води до стойност, която е извън диапазона на типа на колоната.

Пример за грешката

Ето пример за код, който създава грешката:

SELECT SUM(bank_balance) 
FROM accounts;

Резултат:

Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int.

В този случай използвах SUM() функция за получаване на сумата от bank_balance колона, която има тип данни int .

Грешката възникна, защото резултатът от изчислението е извън обхвата на int тип данни.

Ето всички данни в моята таблица:

SELECT bank_balance 
FROM accounts;

Резултат:

+----------------+
| bank_balance   |
|----------------|
| 1300000000     |
| 1200000000     |
| 800500000      |
+----------------+

Това са някои големи банкови салда... и добавянето на трите от тях води до по-голямо число от int може да обработва (int диапазонът е -2,147,483,648 до 2,147,483,647).

Решението

Можем да се справим с тази грешка, като преобразуваме int колона към bigint когато стартираме заявката:

SELECT SUM(CAST(bank_balance AS bigint)) 
FROM Accounts;

Резултат:

3300500000

Този път се получи.

Можете също да промените типа данни на действителната колона за по-трайно решение.

В случай, че се чудите, bigint диапазонът е -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807.

Една и съща грешка в различни сценарии

Същата грешка (Msg 8115) може да възникне (с малко по-различно съобщение за грешка), когато се опитате да преобразувате изрично между типове данни и оригиналната стойност е извън обхвата на новия тип. Вижте коригиране на „Грешка при аритметично препълване при преобразуване 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. Отстраняване на неизправности Групи за наличност на SQL Server Always On

  2. Как да форматирате числа в SQL Server

  3. Как да конвертирате низ в дата/час в SQL Server с помощта на CAST()

  4. TSQL:Създайте изглед, който има достъп до множество бази данни

  5. Извличане на данни от съхранена процедура, която има множество набори от резултати