3

値を一時テーブルに保存しながら、列のデータ型を変更 (増加) する方法はありますか?

SELECT TableA.ID_NO, sum(TABLEA.COST * TABLEB.QTY) as TOTAL
INTO #matCalc
FROM TABLEA A 
INNER JOIN TABLEB 
ON A.ID_NO = B.ID_NO

実際のクエリにはより大きな計算があります。ストアド プロシージャを実行すると、「数値をデータ型数値に変換する算術オーバーフロー エラー」というエラーが発生します。

どんな解決策も大歓迎です。

ありがとうございました。

4

3 に答える 3

11

数値をより大きな型として明示的にキャストするだけです。私は例として18,2を使用していますが、あなたのデータがわからないので、異なる精度/スケールがあなたにとってよりうまくいくかもしれません:

SELECT TableA.ID_NO, 
  SUM(CONVERT(DECIMAL(18,2), TABLEA.COST) * TABLEB.QTY) as TOTAL
INTO #matCalc
FROM TABLEA A 
INNER JOIN TABLEB 
ON A.ID_NO = B.ID_NO;
于 2012-06-25T18:37:45.890 に答える
4

これを試して

Create Table #matCalc(
ID BIGINT NULL,
TOTAL BIGINT NULL
)

INSERT INTO #matCalc
SELECT TableA.ID_NO, sum(TABLEA.COST * TABLEB.QTY) as TOTAL
FROM TABLEA A 
INNER JOIN TABLEB 
ON A.ID_NO = B.ID_NO
于 2012-06-25T18:50:39.460 に答える
0

一時テーブルを次のように使用します。

TOTAL に NUMERIC(18,2) が必要な場合など、適切なデータ型を使用します。

DECLARE @TempTable TABLE(
ID BIGINT NULL,
TOTAL BIGINT NULL
)

DELETE FROM @TempTable
INSERT INTO @TempTable
SELECT TableA.ID_NO, sum(TABLEA.COST * TABLEB.QTY) as TOTAL
FROM TABLEA A 
INNER JOIN TABLEB 
ON A.ID_NO = B.ID_NO
于 2012-06-25T18:30:49.337 に答える