Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Napraw „Błąd przepełnienia arytmetycznego podczas konwersji wyrażenia na typ danych int” w SQL Server

Jeśli otrzymujesz błąd Msg 8115, Level 16, Błąd przepełnienia arytmetycznego podczas konwersji wyrażenia na typ danych int w SQL Server może się zdarzyć, że wykonujesz obliczenia, których wynikiem jest wartość spoza zakresu.

Może się to zdarzyć gdy używasz funkcji takiej jak SUM() na kolumnie, a obliczenia dają w wyniku wartość, która jest poza zakresem typu kolumny.

Przykład błędu

Oto przykład kodu, który generuje błąd:

SELECT SUM(bank_balance) 
FROM accounts;

Wynik:

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

W tym przypadku użyłem SUM() funkcja, aby uzyskać sumę bank_balance kolumna, która ma typ danych int .

Wystąpił błąd, ponieważ wynik obliczenia jest poza zakresem int typ danych.

Oto wszystkie dane w mojej tabeli:

SELECT bank_balance 
FROM accounts;

Wynik:

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

To są niektóre duże salda bankowe… a dodanie trzech z nich skutkuje większą liczbą niż int może obsłużyć (int zakres wynosi od -2147483648 do 2147483647).

Rozwiązanie

Możemy poradzić sobie z tym błędem, konwertując int kolumna do bigint kiedy uruchamiamy zapytanie:

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

Wynik:

3300500000

Tym razem się udało.

Możesz także zmienić typ danych rzeczywistej kolumny, aby uzyskać bardziej trwałe rozwiązanie.

Jeśli się zastanawiasz, bigint zakres wynosi od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807.

Ten sam błąd w różnych scenariuszach

Ten sam błąd (komunikat 8115) może również wystąpić (z nieco innym komunikatem o błędzie) podczas próby jawnej konwersji między typami danych, gdy oryginalna wartość znajduje się poza zakresem nowego typu. Zobacz Napraw „Błąd przepełnienia arytmetycznego konwersji na typ danych liczbowych” w SQL Server, aby to naprawić.

Ten sam błąd (Msg 8115) może również wystąpić (z nieco innym komunikatem o błędzie) podczas próby wstawienia danych do tabeli, gdy jej IDENTITY kolumna osiągnęła limit typu danych. Zobacz poprawkę:„Błąd przepełnienia arytmetycznego podczas konwersji IDENTITY do typu danych…” w SQL Server, aby dowiedzieć się, jak to naprawić.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wprowadzanie dynamicznie generowanej tabeli przestawnej do tabeli temp

  2. Jaki jest najlepszy sposób tworzenia i wypełniania tabeli liczb?

  3. Jak naprawić „Tylko jedno wyrażenie można określić na liście wyboru…” w SQL Server

  4. Jak wygenerować zakres dat w SQL Server

  5. Co to jest DATALENGTH() w SQL Server?