sql >> Base de Datos >  >> RDS >> Sqlserver

Solucione el "Error de desbordamiento aritmético al convertir la expresión al tipo de datos int" en SQL Server

Si recibe el error Mensaje 8115, nivel 16, error de desbordamiento aritmético al convertir la expresión al tipo de datos int en SQL Server, podría ser que esté realizando un cálculo que resulte en un valor fuera de rango.

Esto puede suceder cuando usa una función como SUM() en una columna y el resultado del cálculo es un valor que está fuera del rango del tipo de columna.

Ejemplo del error

Aquí hay un ejemplo de código que produce el error:

SELECT SUM(bank_balance) 
FROM accounts;

Resultado:

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

En este caso usé SUM() función para obtener la suma del bank_balance columna, que tiene un tipo de datos de int .

El error ocurrió porque el resultado del cálculo está fuera del rango del int tipo de datos.

Aquí están todos los datos en mi tabla:

SELECT bank_balance 
FROM accounts;

Resultado:

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

Esos son algunos saldos bancarios grandes... y sumando los tres da como resultado un número mayor que un int puede manejar (el int el rango es -2,147,483,648 a 2,147,483,647).

La solución

Podemos lidiar con este error convirtiendo el int columna a un bigint cuando ejecutamos la consulta:

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

Resultado:

3300500000

Esta vez funcionó.

También puede cambiar el tipo de datos de la columna real para una solución más permanente.

En caso de que te lo estés preguntando, el bigint el rango es -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807.

Mismo error en diferentes escenarios

También puede ocurrir el mismo error (Msg 8115) (con un mensaje de error ligeramente diferente) cuando intenta convertir explícitamente entre tipos de datos y el valor original está fuera del rango del nuevo tipo. Consulte Arreglar "Error de desbordamiento aritmético al convertir int a tipo de datos numérico" en SQL Server para arreglar esto.

El mismo error (Msg 8115) también puede ocurrir (con un mensaje de error ligeramente diferente) cuando intenta insertar datos en una tabla cuando su IDENTITY columna ha alcanzado el límite de su tipo de datos. Ver corrección:“Error de desbordamiento aritmético al convertir IDENTITY al tipo de datos…” en SQL Server para saber cómo arreglar esto.