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

Corrige “Erro de estouro aritmético convertendo int para tipo de dados numérico” no SQL Server


Se você estiver recebendo o erro Msg 8115, Level 16, Erro de estouro aritmético ao converter int para tipo de dados numérico no SQL Server, provavelmente é porque você está executando uma operação que resulta em um erro de conversão de dados devido a um valor fora do intervalo.

Isso geralmente acontece quando você tenta converter um número para um tipo de dados diferente, mas está fora do intervalo aceito para o novo tipo de dados.

Exemplo do erro


Aqui está um exemplo de código que produz o erro:
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.

Neste caso, eu estava tentando converter um inteiro em um decimal.

Mas meu erro é que só permiti uma precisão de 3 para o valor decimal resultante. Esta precisão não é suficiente para o valor que seria produzido por esta operação (que seria 275.00 ).

A solução


O problema é facilmente corrigido:
SELECT CAST(275 AS DECIMAL(5, 2));

Resultado:
275.00

Tudo o que fiz foi aumentar o argumento de precisão para um valor mais suficiente.

Especificamente, aumentei de 3 para 5 .

Se eu esperasse que inteiros maiores chegassem (por exemplo, se o inteiro estivesse em uma coluna de banco de dados), precisaria aumentar a precisão para que pudesse lidar com os valores maiores.

Só para ficar claro, a precisão é o número total máximo de dígitos decimais a serem armazenados. Esse número inclui os lados esquerdo e direito do ponto decimal. A precisão deve ser um valor de 1 através da precisão máxima de 38 . A precisão padrão é 18 .

Mesmo erro em cenários diferentes


O mesmo erro (Msg 8115) pode ocorrer (com uma mensagem de erro ligeiramente diferente) 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. Consulte Corrigir “Erro de estouro aritmético ao converter expressão em tipo de dados int” no SQL Server para corrigir isso.

E 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.