Zaprvé, nejde o „křiklavý designový problém“. SQL je popisný jazyk výstupu, nikoli procedurální jazyk, který určuje, jak se provádí zpracování. Obecně neexistuje žádná záruka na pořadí zpracování a to je výhoda. Mohl bych říci, že existuje problém s návrhem, ale týká se obecného zacházení s výjimkami v příkazech SQL.
Podle dokumentace k SQL Serveru (http://msdn.microsoft.com/en-us/library/ms181765.aspx) se můžete spolehnout na pořadí evauace pro příkaz CASE pro skalární výrazy . Mělo by tedy fungovat následující:
select (case when isnumeric(c.varcharColumn) = 1 then cast(c.varcharColumn as int) end)
Nebo, abychom se přiblížili výrazu "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)
Váš kód alespoň provádí explicitní CAST. Tato situace je mnohem horší, když jsou přetypování implicitní (a existují stovky sloupců).