Zwykły ISNUMERIC to śmieci
- Pusty ciąg,
+,-i. wszystkie są ważne - Tak samo jest
+.itp. 1e-3jest prawidłowy dla liczby zmiennoprzecinkowej, ale nie dziesiętnej (chyba że Rzucisz na zmiennoprzecinkową, a następnie na dziesiętną)
Aby uzyskać szczególnie tajemnicze, ale bezpieczne rozwiązanie, dołącz e0 lub .0e0 wtedy użyj ISNUMERYCZNE
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Więc
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable