SQL Server zwraca “ Błąd przepełnienia arytmetycznego podczas konwersji wyrażenia na typ danych int. ”

Kiedy uruchamiam to polecenie z SUM()

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

Otrzymuję,

Arithmetic overflow error converting expression to data type int. 

Masz jakieś pojęcie o przyczynie?

Po prostu postępuję zgodnie z instrukcjami w tę odpowiedź .

Odpowiedź

W przypadku wartości większych niż INT max (2 147 483 647), będziesz „chciał użyć 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; 

Jeśli dzieje się to w SUM, musisz przekonwertować Amount na 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; 

Odpowiedź

Ten problem jest spowodowany przez SUM()

musisz CAST t.Amount jako 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; 

Referencje

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *