sql >> Database >  >> RDS >> Sqlserver

Fix Msg 8114 "Fout bij het converteren van gegevenstype varchar naar numeriek" in SQL Server

Als u SQL Server-foutbericht Msg 8114 krijgt met de tekst Fout bij het converteren van gegevenstype varchar naar numeriek , komt dit waarschijnlijk omdat u probeert een gegevenstypeconversie uit te voeren die mislukt omdat de waarde niet kan worden geconverteerd naar het bestemmingstype.

Het is niet omdat je dat type niet naar het nieuwe type kunt converteren. Het komt door de waarde zelf.

Voorbeeld van fout

Hier is een voorbeeld van code die de fout veroorzaakt:

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

Resultaat:

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

Deze fout is opgetreden omdat SQL Server de tekenreekswaarde niet naar decimaal kon converteren.

Oplossing 1

Om dit op te lossen, moet u ervoor zorgen dat u een waarde opgeeft die SQL Server kan converteren.

Als je een kolom passeert, controleer dan of je de juiste kolom hebt. Hetzelfde als je een variabele doorgeeft - controleer of het de juiste variabele is.

Houd er rekening mee dat dit niet in alle gevallen zal gebeuren als u probeert een tekenreeks naar decimaal te converteren, omdat sommige tekenreekswaarden kunnen worden geconverteerd.

De volgende conversie slaagt bijvoorbeeld:

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

Resultaat:

10.00

Hier kon SQL Server uitwerken dat 10 is een getal, en daarom is de conversie gelukt.

Oplossing 2

Als je het niet erg vindt dat de conversie mislukt, maar je wilt gewoon niet dat er een fout optreedt, probeer dan de TRY_CAST() of TRY_CONVERT() functies.

In plaats van een fout te retourneren, retourneren deze functies NULL wanneer de waarde niet kan worden geconverteerd.

Voorbeeld:

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

Resultaat:

NULL

  1. TO_DATE() Functie in Oracle

  2. MySQL Galera-clusterreplicatie gebruiken om een ​​geo-gedistribueerde cluster te maken:deel één

  3. Een eenvoudige selectiequery maken in de ontwerpweergave in Access 2016

  4. Microsoft OLE DB Niet verouderd! Lang leve ADO!