Хорошо ... вот мое переписывание вашего кода ...
UPDATE prospekts SET sni_kod =
CASE
WHEN ISNUMERIC(@sni_kod)=1 THEN
CASE
WHEN cast(@sni_kod as int) BETWEEN 1000 AND 1499 OR cast(@sni_kod as int) BETWEEN 1600 AND 2439 THEN '1'
WHEN cast(@sni_kod as int) BETWEEN 7000 AND 7499 THEN 'W'
ELSE @sni_kod
END
ELSE @sni_kod
END
Таким образом, он будет пытаться выполнить CAST, только если это числовое значение, поэтому вы не получите исключений приведения, как другие люди упоминали в комментариях.
Поскольку вы сказали, что здесь задействовано гораздо больше операторов, я предполагаю, что у вас гораздо больше диапазонов номеров, которые получают разные значения ... Если это так, вы можете использовать вторую таблицу (может быть временный, если, как говорится в вашем вопросе, вы ограничены только кодом SQL), для присоединения которого используются минимальное значение, максимальное значение и то, что вы хотите отобразить на основе этого. Становится сложнее, когда вам нужно оценить нечисловые значения, но это не невозможно.
Однако, не видя полного заявления, это лучшее, что я могу предложить.