これは私たちを当惑させました...
CAST を使用して float を decimal に変換するクエリがあります。このクエリは、多数のテーブルを結合して、返される行を見つけます。テーブルの 1 つの行の 1 つに、10 進数への CAST で算術オーバーフロー エラーが発生する値が含まれています。
奇妙なことに、この値を持つ行は、結果セットで返される行の 1 つではありません。
非常に単純化された例:
ID Value
1 1.1
2 11.1
3 11111.1
クエリ:
SELECT Id, CAST(value as decimal(4,1))
FROM <complex number of joins>
WHERE <conditions that don't return row with Id 3>
... 算術エラー
WHERE 句でその行を明示的に除外すると、エラーはなくなります。例えば。WHERE ... AND ID <> 3
.. 正常に動作します
これがどのように可能か知っている人はいますか?
注: ここでの問題は、CAST が ID 3 の行で失敗することではありません! 問題は、WHERE 句が ID 3 の行を除外しているにもかかわらず、クエリが失敗することです。値が 11111.1 の行が WHERE 句によって返されない場合、クエリはどのように失敗するのでしょうか?