sql >> Database teknologi >  >> RDS >> Sqlserver

Ret Msg 8114 "Fejl ved konvertering af datatype varchar til numerisk" i SQL Server

Hvis du får SQL Server-fejl Msg 8114, der lyder noget som Fejl ved konvertering af datatype varchar til numerisk , er det sandsynligvis fordi du forsøger at udføre en datatypekonvertering, der mislykkes på grund af, at værdien ikke kan konverteres til destinationstypen.

Det er ikke fordi du ikke kan konvertere den type til den nye type. Det er på grund af selve værdien.

Eksempel på fejl

Her er et eksempel på kode, der producerer fejlen:

SELECT CAST('Ten' AS DECIMAL(5,2));

Resultat:

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

Denne fejl opstod, fordi SQL Server ikke kunne konvertere strengværdien til decimal.

Løsning 1

For at løse dette skal du sørge for at angive en værdi, som SQL Server kan konvertere.

Hvis du passerer en kolonne, skal du kontrollere, at du har den rigtige kolonne. Det samme, hvis du sender en variabel - tjek, at det er den rigtige variabel.

Husk på, at dette muligvis ikke sker i alle tilfælde af forsøg på at konvertere en streng til decimal, fordi nogle strengværdier kan konverteres.

For eksempel lykkes følgende konvertering:

SELECT CAST('10' AS DECIMAL(5,2));

Resultat:

10.00

Her var SQL Server i stand til at regne ud den 10 er et tal, og derfor lykkedes konverteringen.

Løsning 2

Hvis du ikke har noget imod, at konverteringen mislykkes, men du bare ikke vil have, at den returnerer en fejl, kan du prøve TRY_CAST() eller TRY_CONVERT() funktioner.

I stedet for at returnere en fejl, returnerer disse funktioner NULL når værdien ikke kan konverteres.

Eksempel:

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

Resultat:

NULL

  1. Er det dårligt design at bruge arrays i en database?

  2. Hvordan kan jeg oprette en begrænsning for at kontrollere, om en e-mail er gyldig i postgres?

  3. Sådan gendannes Galera Cluster- eller MySQL-replikation fra Split Brain Syndrome

  4. Er der nogen forskel mellem !=og <> i Oracle Sql?