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ță