まず、これは「明白な設計上の問題」ではありません。 SQLは出力の記述言語であり、処理がどのように行われるかを指定する手続き型言語ではありません。一般に、処理の順序は保証されておらず、これは利点です。設計上の問題があると言えるかもしれませんが、それはSQLステートメントでの例外の一般的な処理に関するものです。
SQL Serverのドキュメント(http://msdn.microsoft.com/en-us/library/ms181765.aspx)によると、スカラー式の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を実行しています。キャストが暗黙的である(そして何百もの列がある)場合、この状況ははるかに厄介です。