sql >> Databasteknik >  >> RDS >> Sqlserver

Fix Msg 8114 "Fel vid konvertering av datatyp varchar till numerisk" i SQL Server

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

  1. Åtgärda "FEL:  varje UNION-fråga måste ha samma antal kolumner" i PostgreSQL

  2. Den flerdelade identifieraren kunde inte bindas

  3. 2nd Quadrant Deutschland – Special Training Opening Bargain

  4. Hur SET ROWCOUNT fungerar i SQL Server