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

Solucione el "Error de desbordamiento aritmético al convertir int a tipo de datos numérico" en SQL Server

Si recibe el error Mensaje 8115, nivel 16, error de desbordamiento aritmético al convertir int a tipo de datos numérico en SQL Server, probablemente se deba a que está realizando una operación que genera un error de conversión de datos debido a un valor fuera de rango.

Esto suele suceder cuando intenta convertir un número a un tipo de datos diferente, pero está fuera del rango aceptado para el nuevo tipo de datos.

Ejemplo del error

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

SELECT CAST(275 AS DECIMAL(3, 2));

Resultado:

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

En este caso, estaba tratando de convertir un número entero a un decimal.

Pero mi error es que solo permití una precisión de 3 para el valor decimal resultante. Esta precisión no es suficiente para el valor que produciría esta operación (que sería 275.00 ).

La solución

El problema se soluciona fácilmente:

SELECT CAST(275 AS DECIMAL(5, 2));

Resultado:

275.00

Todo lo que hice fue aumentar el argumento de precisión a un valor más suficiente.

Específicamente, lo aumenté de 3 a 5 .

Si esperaba que aparecieran números enteros más grandes (por ejemplo, si el número entero estaba en una columna de la base de datos), necesitaría aumentar la precisión para que pudiera manejar los valores más grandes.

Para que quede claro, la precisión es el número total máximo de dígitos decimales que se almacenarán. Este número incluye tanto el lado izquierdo como el derecho del punto decimal. La precisión debe ser un valor de 1 a través de la máxima precisión de 38 . La precisión predeterminada es 18 .

Mismo error en diferentes escenarios

El mismo error (Msg 8115) puede ocurrir (con un mensaje de error ligeramente diferente) cuando usa una función como SUM() en una columna, y el cálculo da como resultado un valor que está fuera del rango del tipo de columna. Consulte Arreglar "Error de desbordamiento aritmético al convertir expresión a tipo de datos int" en SQL Server para arreglar esto.

Y 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 la 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.