0

現在、古いデータを新しいテーブルに変換するためにMS-SQLで書いていますが、古いテーブルの変数の1つはintです。新しいテーブルでは、現在データが入力されているため、10 進数 (10,3) である必要があります。古いデータにもいくつかのヌルがあります。ラウンドを使用してデータを変換して新しい小数を生成すると、エラーが発生します。

メッセージ 8115、レベル 16、状態 8、行 1 int をデータ型数値に変換中に算術オーバーフロー エラーが発生しました。

次のコードを使用します。

insert into Data_Exchange_Claims_History (Qty_Dispense)
select convert(decimal(10,3),round(ISNULL(Qty_Dispense, 0), 3))
from dbo.Data_Exchange_Claims_History_old c
4

3 に答える 3

4

問題は、どのように失敗するかだと思います。

INT常に に収まるとは限りませんDECIMAL(10,3)

DECIMAL(10,3)は合計 10 桁を意味し、そのうち 3 桁は小数点以下です。

つまり、 までの整数のみを表すことができます9999999

于 2013-02-15T17:36:43.880 に答える
1

INT は、<= 9,999,999 の場合にのみ DECIMAL 10,3 に収まります。

于 2013-02-15T17:39:56.063 に答える
0

しばらく問題を試してみたところ、小数点以下3桁を移動するだけでよいことに気づいたので、数値を1000で割るとうまくいきました。新しいクエリは次のようになります。

insert into Data_Exchange_Claims_History (Qty_Dispense)
select convert(decimal(10,3),(Qty_Dispense/1000))
from dbo.Data_Exchange_Claims_History_old c 

問題を新しい視点で見るのに役立ったので、これに貢献してくれたすべての人に感謝します。

于 2013-02-15T18:58:25.550 に答える