その理由は、SQLサーバーが小数精度を失わないことです。算術演算子は左から右に作用し、最初の式では、実際の小数成分(117378300.0)は生成されませんが、2番目の演算子は小数点以下6桁(0.1295810)で生成されます。したがって、後続の操作では、SQL Serverは「データを失わない」ために、0と6の小数点以下の桁をそれぞれ維持します。
select 3900.0 * 30097 val
into tbl_a
select 3900.0/30097 val
into tbl_b
select table_name, column_name, numeric_precision, numeric_scale
from information_schema.columns
where table_name in ('tbl_a', 'tbl_b')
を生成します:
table_name column_name numeric_precision numeric_scale
tbl_a val 11 1
tbl_b val 11 7 <-- decimal component
あなたが実際に生成されたデータ型をテーブルに最初の結果を書き込み、観測の違いを見ることができます
出典
2017-11-14 17:21:01
ben