Se ricevi un messaggio di errore SQL Server 8114 che legge qualcosa come Errore durante la conversione del tipo di dati varchar in numerico , probabilmente è perché stai tentando di eseguire una conversione del tipo di dati che non riesce perché il valore non può essere convertito nel tipo di destinazione.
Non è perché non puoi convertire quel tipo nel nuovo tipo. È a causa del valore stesso.
Esempio di errore
Ecco un esempio di codice che produce l'errore:
SELECT CAST('Ten' AS DECIMAL(5,2));
Risultato:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Questo errore si è verificato perché SQL Server non è stato in grado di convertire il valore della stringa in decimale.
Soluzione 1
Per risolvere questo problema, devi assicurarti di fornire un valore che SQL Server possa convertire.
Se stai passando una colonna, controlla di avere la colonna giusta. Lo stesso se stai passando una variabile:controlla che sia la variabile giusta.
Tieni presente che ciò potrebbe non accadere in tutti i casi in cui si tenta di convertire una stringa in decimale, poiché alcuni valori di stringa possono essere convertiti.
Ad esempio, la seguente conversione ha esito positivo:
SELECT CAST('10' AS DECIMAL(5,2));
Risultato:
10.00
Qui, SQL Server è stato in grado di elaborare quel 10
è un numero e quindi la conversione è riuscita.
Soluzione 2
Se non ti dispiace che la conversione fallisca, ma semplicemente non vuoi che restituisca un errore, prova TRY_CAST()
o TRY_CONVERT()
funzioni.
Invece di restituire un errore, queste funzioni restituiscono NULL
quando il valore non può essere convertito.
Esempio:
SELECT TRY_CAST('Ten' AS DECIMAL(5,2));
Risultato:
NULL