Il semplice ISNUMERIC è spazzatura
- Stringa vuota,
+
,-
e. sono tutti validi
- Anche
+.
ecc 1e-3
è valido per float ma non decimal (a meno che tu non CAST per float poi in decimale)
Per una soluzione particolarmente criptica ma sicura, aggiungi e0
o .0e0
allora usa ISNUMERICO
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Quindi
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable