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.