質問: c#のプログラムでdouble型変数を用いて演算を行い、SQL serverのnumeric(12,3)の型のカラムに登録したら0になってしまいました。 実際の演算式は下記で999999999.999-999999999.998 答えは0.001となっています。 この答えをオラクルnumber(12,3)に登録すると0.001になりましたがSQL serverに登録したら0になってしまったのです。 登録時のパラメーターのマッピング方法がが間違っているのでしょうか。
回答: SQL Serverのnumeric型は精度を指定しなかった場合、`numeric(18,0)`となります。scale=0ですので整数しか扱えません。たぶんこれが原因です。 質問文にはC#からSQL Serverにどのような方法でデータを渡したのかが言及されていませんが、渡す際に精度が指定されていなかったのだろうと推測します。例えばC#の`decimal`(.NETの`System.Decimal`)を精度ヒント無しで自動変換した、とか。