Я думаю, что вы пытаетесь обновить 'xx.xx' до varchar (2) (поскольку вывод арифметической операции с двумя числами будет числовым, а не целым числом), что невозможно. Итак, я взял левую 2, которую вы можете изменить на основе данных, будь то правая 2 или левая 2, в зависимости от того, что вы хотите. В идеале вам следует увеличить размер, если этого требуют данные.
SCIENCE_TH =
CASE
WHEN
(SCIENCE_TTL <> 'Ab'
AND try_convert(NUMERIC(38, 2), SCIENCE_TTL ) <
30.00) THEN
LEFT(CAST((30.00 - try_convert(NUMERIC(38, 2),
SCIENCE_TTL ) ) AS VARCHAR),2)
else
SCIENCE_TH
end
// remaining block ..