質問: ### 知りたいたいこと ``` SELECT * FROM TABLE_A WHERE ID=0123456789012345678 --※カラム[ID]は「varchar(18)」となっています。 ``` この場合に、IDへの条件に上記のような文字列ではない数値「0123456789012345678」を指定すると 「varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。」 が、発生します。 この時暗黙変換されて、「ID」が数値となっているかと思いますが、なぜエラーとなるのでしょうか? 数値の開始が「0」なため、暗黙変換時になにか特殊な変換がされるのでしょうか? 可能であれば、エラーの理由とカラム「ID」がどういった評価が内部的にされているのかを教えてください。 また暗黙変換される「ID」の評価値を確認する方法があれば教えてください。 尚、上記SQLは開始が「0」でなければ正常に結果を返却します。 ※数値部分を文字列(''囲い)にすれば正常に動作することはわかります。 そうではなく、どういった評価がされているかが知りたいです。 ### 補足情報(言語/FW/ツール等のバージョンなど) MicroSoft SQL Server 2012
回答: SQL Serverは、暗黙変換の場合、インデックスが効きません。 その場合、IDがキーでも全件を評価します。 その際、データの中に18桁のID「123456789012345678」があり、かつIDの条件が「0123456789012345678」だと桁数が違う為、算術エラーとなっていました。