Problème d'instruction SQL CASE

J'ai un problème d'autre cas dans l'instruction SQL.

Dans ma colonne de table SQL, L_Keyword2 contient la valeur ci-dessous et est de type varchar .

 YES, LAND INCLUDED, N/APPLICABLE, 3, 1.5, NO, 4.5+, OTHER, NULL, 2, 1, LAND LEASED, 0, 3.5, N/A, OE, 4, 2.5, 

Lorsque j'utilise cette colonne dans une déclaration de cas comme

 SELECT L_Keyword2, CASE WHEN class LIKE 'RE_1' THEN L_Keyword2 ELSE 0 END FROM Mytable 

Cette requête SQL génère une erreur:

La conversion a échoué lors de la conversion de la valeur varchar '1.5' en type de données int.

Pourquoi cette requête SQL provoque-t-elle une erreur de conversion? Même moi, je n'y ai pas fait de conversion.

Peut être ça:

 SELECT L_Keyword2, CASE WHEN class LIKE 'RE_1' THEN L_Keyword2 ELSE '0' END FROM Mytable 

Si vous voulez utiliser LIKE mettre % wildcard. Sinon, il s'agit d'une simple comparaison ( WHEN class = 'RE_1' ).

Premièrement, CASE dans T-SQL n'est pas une déclaration – c'est une expression . En tant que tel, toutes les valeurs qu'il peut renvoyer de ses différentes clauses WHEN doivent être du même type de données , et si elles ne le sont pas, SQL Server a une list de précédence ( voir la documentation MSDN pertinente pour plus de détails ). list, int varie plus haut que varchar

Dans votre cas, le CASE renvoie évidemment un int de la clause ELSE , donc il essaie de returnner la valeur de L_Keyword2 (à partir de la première clause WHEN ... THEN ... ) en tant Int aussi, et échoue donc.