Si vous obtenez l'erreur SQL Server Msg 8114 qui lit quelque chose comme Erreur lors de la conversion du type de données varchar en numérique , c'est probablement parce que vous essayez d'effectuer une conversion de type de données qui échoue car la valeur ne peut pas être convertie en type de destination.
Ce n'est pas parce que vous ne pouvez pas convertir ce type vers le nouveau type. C'est à cause de la valeur elle-même.
Exemple d'erreur
Voici un exemple de code qui génère l'erreur :
SELECT CAST('Ten' AS DECIMAL(5,2));
Résultat :
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Cette erreur s'est produite car SQL Server n'a pas pu convertir la valeur de chaîne en décimal.
Solution 1
Pour résoudre ce problème, vous devez vous assurer de fournir une valeur que SQL Server peut convertir.
Si vous dépassez une colonne, vérifiez que vous avez la bonne colonne. Idem si vous transmettez une variable - vérifiez qu'il s'agit de la bonne variable.
Gardez à l'esprit que cela peut ne pas se produire dans tous les cas où vous essayez de convertir une chaîne en décimal, car certaines valeurs de chaîne peuvent être converties.
Par exemple, la conversion suivante réussit :
SELECT CAST('10' AS DECIMAL(5,2));
Résultat :
10.00
Ici, SQL Server a pu déterminer que 10
est un nombre, et donc la conversion a réussi.
Solution 2
Si cela ne vous dérange pas que la conversion échoue, mais que vous ne voulez tout simplement pas qu'elle renvoie une erreur, essayez le TRY_CAST()
ou TRY_CONVERT()
fonctions.
Plutôt que de renvoyer une erreur, ces fonctions renvoient NULL
lorsque la valeur ne peut pas être convertie.
Exemple :
SELECT TRY_CAST('Ten' AS DECIMAL(5,2));
Résultat :
NULL