Обикновеният ISNUMERIC е боклук
- Празен низ,
+,-и. всички са валидни - И
+.и др. 1e-3е валидно за float, но не и за десетичен знак (освен ако не CAST, за да float след това до десетичен знак)
За особено загадъчно, но сигурно решение, добавете e0 или .0e0 тогава използвайте ISNUMERIC
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Така че
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable