

MicrosoftAccessにSQLServerからリンクを張ったテーブルを  
SQLで計算して表示しようとすると、オーバーフローを起こして  
エラーになってしまいます。

リンクを張らずにローカルテーブルの時は普通に計算できていたのですが、  
リンクにするとエラーになってしまいます。

下記が使用しているSQLです。

[code]

    SELECT [categoly],SUM(CLNG(([幅]*[高]*[長]*[個数]*[価格]) / 1000000000)) AS [合計] FROM ([M_材料] WHERE [id] = 187 GROUP BY [categoly]
    
[/code]

体積をmmで出ているデータの為か、かなり大きい数字になってしまうようで、どうすればいいか解らずにいます。

解決策をお願いできますでしょうか。

よろしくお願いいたします。

[![画像の説明をここに入力](https://i.stack.imgur.com/gV7Yi.jpg)](https://i.stack.imgur.com/gV7Yi.jpg)

[![画像の説明をここに入力](https://i.stack.imgur.com/2ZKFT.jpg)](https://i.stack.imgur.com/2ZKFT.jpg)


CC BY-SA 4.0
2021-10-04T00:59:16.333
82853
2021-10-06T18:53:38.860
2021-10-05T06:20:33.087
9374
9374
question
sql-server ms-access
MicrosoftAccessにSQLServerからリンクテーブルを張り、それをクエリで計算しようとするとオーバーフローする


どうやってSQLを発行しようとしているのかわかりませんが、とりあえず計算式を

[code]

    [幅] / 1000000000.0 *[高]*[長]*[個数]*[価格]
    
[/code]

のようにすれば動くかと思います。  
ただし、CLNGしているのでこの計算式がVBAのLongの範囲内に収まることが前提ですが。  
エラーの原因は、SQL Serverではint型同士の演算はint型になるからです。  
小数点付きのリテラルはdecimal(numeric)型とみなされるので、int型を超える範囲でも計算できるようになります。

あとCLNGは切り捨てではなくて、いわゆる銀行丸めという丸めを行います。  
余談ですが、CLNGはVBAの関数なので、大量データを処理するとパフォーマンスが出ない可能性が高いですよ。


CC BY-SA 4.0
2021-10-06T18:48:11.620
82925
2021-10-06T18:53:38.860
2021-10-06T18:53:38.860
9811
9811
82853
answer