Simple ISNUMERIC es basura
- Cadena vacía,
+,-y. son todos válidos - También lo es
+.etc. 1e-3es válido para flotante pero no decimal (a menos que CAST para flotar y luego para decimal)
Para una solución particularmente críptica pero a prueba de fallas, agregue e0 o .0e0 entonces usar ESNUMÉRICO
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Entonces
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable