case文を持つSQLクエリがあります。 case文には、2つの整数値を加算し、それらの合計がsqlで許される最大整数値より小さいことが検証される条件があります(単純化のために丸められています)。 問題は、合計値がsqlの最大許容整数よりも大きいため、2つの値が追加されるWHEN文では、文全体がSQL算術例外をスローします。私は、私は変数の一つのタイプを変更する場合、私は周りの仕事を見つけた... 2つの整数値を追加するときの合計値は、一時的な整数変数に配置され、内部 例えば、条件が2つの大きなint値を追加するSQL case文
Declare @int1 as Int =2147483598
Declare @int2 as Int =2147483598
Declare @int3 as Int =0
DECLARE @MaxIntValue INT = 2147483600
set @int3 = (CASE WHEN (@int1 < 2)
THEN @int1
WHEN ((@int1 + @int2) < @MaxIntValue)
THEN @int1 + @int2
ELSE @int1
END)
select @int3
を想定しています私は再び合計値が内部的に、今だけでなくBIGINT型に変化し保持するために使用する変数のデータ型を想定しておりますのでBIGINTではなく (すなわち、
Declare @int1 as bigint =2147483598
) 問題が解決されます。現実には、このクエリは、これらの値が調達されている場所から複数のテーブルを含む、はるかに大きく複雑なストアドプロシージャの一部なので、このソリューションを避けたいと思います。 ありがとうございます。
をBIGINTにキャストしようと、答えの種類を探してるんですか?回避策があります...何が間違っていますか、正確には? – Blorgbeard
このcaseステートメントは、実際には大きなストアドプロシージャの一部であり、2つのテーブルのフィールドがマージされ、このCASEステートメントに基づいてフィールドの1つが更新されるMERGEステートメント内にカプセル化されます。この例で使用した整数値はテーブルから直接取得されるため、テーブルのデータ型を変更する必要がありますが、これは最も簡単な解決策ではないと思います。 – Shegute
なぜbigintに変数をキャストしないのですか? –