SQL Server restituisce “ Errore di overflow aritmetico durante la conversione dellespressione nel tipo di dati int. ”

Quando eseguo questo comando con SUM()

SELECT COUNT(*) AS [Records], SUM(t.Amount) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101; 

sto ottenendo,

Arithmetic overflow error converting expression to data type int. 

Qualche idea su quale sia la causa?

Sto solo seguendo le istruzioni in questa risposta .

Risposta

Per valori maggiori di INT max (2.147.483.647), vorrai utilizzare COUNT_BIG (*).

SELECT COUNT_BIG(*) AS [Records], SUM(t.Amount) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101; 

Se sta accadendo in SUM, devi convertire Amount in BIGINT.

SELECT COUNT(*) AS [Records], SUM(CONVERT(BIGINT, t.Amount)) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101; 

Risposta

Questo problema è causato da SUM() funzione

devi CAST t.Amount come BIGINT

SELECT COUNT(*) AS [Records], SUM(CAST(t.Amount AS BIGINT)) AS [Total] FROM dbo.t1 AS t WHERE t.Id > 0 AND t.Id < 101; 

Riferimento

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *