Първо, това не е „явен проблем с дизайна“. SQL е описателен език на изхода, а не процедурен език, който указва как се извършва процесирането. По принцип няма гаранция за реда на обработка и това е предимство. Мога да кажа, че има проблем с дизайна, но той е около общата обработка на изключения в SQL изразите.
Според документацията на SQL Server (http://msdn.microsoft.com/en-us/library/ms181765.aspx), можете да разчитате на реда на evauation за оператор CASE за скаларни изрази . И така, следното трябва да работи:
select (case when isnumeric(c.varcharColumn) = 1 then cast(c.varcharColumn as int) end)
Или, за да се доближите до израз "int":
select (case when isnumeric(c.varcharColumn) = 1 and c.varcharColumn not like '%.%' and c.varcharColumn not like '%e%'
then cast(c.varcharColumn as int)
end)
Поне вашият код прави изрично CAST. Тази ситуация е много по-неприятна, когато отливките са имплицитни (и има стотици колони).