Вероятно, это связано с тем, что функция IsNumeric возвращает true для любого значения, которое МОЖЕТ быть преобразовано в число. Попробуйте следующий пример:
create table McTable (BigMac varchar(255))
insert into McTable select '1p927'
insert into McTable select '1927'
insert into McTable select '1,927'
insert into McTable select '1.927'
select BigMac, isnumeric(BigMac)
from McTable
select BigMac, CAST(BigMac AS DECIMAL)
from McTable
where isnumeric(BigMac) = 1
Даже если все строки, кроме '1p927', являются числовыми, приведение не будет выполнено! Это потому, что «1,927» не может быть преобразовано в десятичную (на моем компьютере)
IsNumeric не работает точно так, как указано. Как найдено здесь , вы можете использовать
IsNumeric (data + 'e0')
-Edo