私は、 nvarchar値を適切なタイプに変換するためSELECT
に使用CASE
するaを実行しています。たとえば、次のようになります。
SELECT CASE
WHEN @propType = 'money' THEN convert(money, datavalue)
[...]
ELSE datavalue
END
FROM [...]
しかし、お金と等しくない場合でもconvert
、常に実行されているようです。実行可能な例:@propType
declare @proptype nvarchar(50)= 'nvarchar'
declare @val nvarchar(10) = 'test'
select
case @proptype
when 'money' then convert(money, @val)
else @val
end
これはなぜですか、どうすれば回避できますか?MSDNのドキュメントには次のように書かれています。
CASEステートメントは、その条件を順番に評価し、条件が満たされた最初の条件で停止します。場合によっては、CASEステートメントが式の結果を入力として受け取る前に、式が評価されます。これらの式の評価でエラーが発生する可能性があります。CASEステートメントのWHEN引数に表示される集計式は、最初に評価されてから、CASEステートメントに提供されます。たとえば、次のクエリでは、MAX集計の値を生成するときに、ゼロ除算エラーが生成されます。これは、CASE式を評価する前に発生します。
これが適切かどうかはわかりませんが、非ネイティブにとって言語はやや重いので、多分そうですか?