Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Corrige “Erro de estouro aritmético ao converter expressão em tipo de dados int” no SQL Server


Se você estiver recebendo o erro Msg 8115, Level 16, Erro de estouro aritmético ao converter expressão para tipo de dados int no SQL Server, pode ser que você esteja realizando um cálculo que resulte em um valor fora do intervalo.

Isso pode acontecer quando você usa uma função como SUM() em uma coluna e o cálculo resulta em um valor que está fora do intervalo do tipo da coluna.

Exemplo do erro


Aqui está um exemplo de código que produz o erro:
SELECT SUM(bank_balance) 
FROM accounts;

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

Neste caso eu usei o SUM() função para obter a soma do bank_balance coluna, que tem um tipo de dados de int .

O erro ocorreu porque o resultado do cálculo está fora do intervalo do int tipo de dados.

Aqui estão todos os dados da minha tabela:
SELECT bank_balance 
FROM accounts;

Resultado:
+----------------+
| bank_balance   |
|----------------|
| 1300000000     |
| 1200000000     |
| 800500000      |
+----------------+

Esses são alguns grandes saldos bancários... e somar os três resulta em um número maior do que um int pode manipular (o int intervalo é -2.147.483.648 a 2.147.483.647).

A solução


Podemos lidar com esse erro convertendo o int coluna para um bigint quando executamos a consulta:
SELECT SUM(CAST(bank_balance AS bigint)) 
FROM Accounts;

Resultado:
3300500000

Desta vez funcionou.

Você também pode alterar o tipo de dados da coluna real para uma solução mais permanente.

Caso você esteja se perguntando, o bigint intervalo é -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807.

Mesmo erro em cenários diferentes


O mesmo erro (Mensagem 8115) também pode ocorrer (com uma mensagem de erro ligeiramente diferente) quando você tenta converter explicitamente entre tipos de dados e o valor original está fora do intervalo do novo tipo. Consulte Correção “Erro de estouro aritmético ao converter int para tipo de dados numérico” no SQL Server para corrigir isso.

O mesmo erro (Msg 8115) também pode ocorrer (com uma mensagem de erro ligeiramente diferente) quando você tenta inserir dados em uma tabela quando sua IDENTITY coluna atingiu o limite de seu tipo de dados. Consulte Correção:“Erro de estouro aritmético ao converter IDENTITY to data type…” no SQL Server para saber como corrigir isso.