SQL Server returnează “ Eroare de deversare aritmetică la conversia expresiei în tip de date int. ”

Când execut această comandă cu SUM()

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

M” primesc,

Arithmetic overflow error converting expression to data type int. 

Ai vreo idee despre care este cauza?

Urmez doar instrucțiunile din acest răspuns .

Răspuns

Pentru valori mai mari decât INT maxim (2.147.483.647), „veți dori să utilizați 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; 

Dacă se întâmplă în SUM, trebuie să convertiți Amount într-un 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; 

Răspuns

Această problemă este cauzată de SUM() funcție

trebuie să CAST t.Amount ca 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; 

Referință

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *