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

Correção da Msg 8114 “Erro ao converter o tipo de dados varchar para numérico” no SQL Server


Se você estiver recebendo a mensagem de erro 8114 do SQL Server que lê algo como Erro ao converter o tipo de dados varchar para numérico , provavelmente é porque você está tentando realizar uma conversão de tipo de dados que falha porque o valor não pode ser convertido para o tipo de destino.

Não é porque você não pode converter esse tipo para o novo tipo. É por causa do valor em si.

Exemplo de erro


Aqui está um exemplo de código que produz o erro:
SELECT CAST('Ten' AS DECIMAL(5,2));

Resultado:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.

Este erro ocorreu porque o SQL Server não conseguiu converter o valor da string em decimal.

Solução 1


Para corrigir isso, você precisa fornecer um valor que o SQL Server possa converter.

Se você está passando uma coluna, verifique se você tem a coluna certa. O mesmo se você estiver passando uma variável - verifique se é a variável correta.

Tenha em mente que isso pode não acontecer em todos os casos de tentar converter uma string em decimal, porque alguns valores de string podem ser convertidos.

Por exemplo, a seguinte conversão é bem-sucedida:
SELECT CAST('10' AS DECIMAL(5,2));

Resultado:
10.00

Aqui, o SQL Server conseguiu descobrir que 10 é um número e, portanto, a conversão foi bem-sucedida.

Solução 2


Se você não se importa com a falha da conversão, mas não quer que ela retorne um erro, tente TRY_CAST() ou TRY_CONVERT() funções.

Em vez de retornar um erro, essas funções retornam NULL quando o valor não pode ser convertido.

Exemplo:
SELECT TRY_CAST('Ten' AS DECIMAL(5,2));

Resultado:
NULL