Обикновеният 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