Om du får SQL Server-fel Msg 8114 som lyder något som Fel vid konvertering av datatyp varchar till numerisk , det beror förmodligen på att du försöker utföra en datatypskonvertering som misslyckas på grund av att värdet inte kan konverteras till destinationstypen.
Det är inte för att du inte kan konvertera den typen till den nya typen. Det är på grund av själva värdet.
Exempel på fel
Här är ett exempel på kod som ger felet:
SELECT CAST('Ten' AS DECIMAL(5,2));
Resultat:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Det här felet uppstod eftersom SQL Server inte kunde konvertera strängvärdet till decimal.
Lösning 1
För att fixa detta måste du se till att du tillhandahåller ett värde som SQL Server kan konvertera.
Om du klarar en kolumn, kontrollera att du har rätt kolumn. Samma sak om du skickar en variabel – kontrollera att det är rätt variabel.
Tänk på att detta kanske inte händer i alla fall när du försöker konvertera en sträng till decimal, eftersom vissa strängvärden kan konverteras.
Till exempel lyckas följande konvertering:
SELECT CAST('10' AS DECIMAL(5,2));
Resultat:
10.00
Här kunde SQL Server räkna ut den där 10
är ett tal, och därför lyckades konverteringen.
Lösning 2
Om du inte har något emot att konverteringen misslyckas, men du bara inte vill att den ska returnera ett fel, prova TRY_CAST()
eller TRY_CONVERT()
funktioner.
Istället för att returnera ett fel returnerar dessa funktioner NULL
när värdet inte kan konverteras.
Exempel:
SELECT TRY_CAST('Ten' AS DECIMAL(5,2));
Resultat:
NULL