SQL Server retourneert “ Rekenkundige overloopfout bij het converteren van expressie naar gegevenstype int. ”

Wanneer ik deze opdracht uitvoer met SUM()

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

krijg ik,

Arithmetic overflow error converting expression to data type int. 

Enig idee wat de oorzaak ervan is?

Ik “volg gewoon de instructies in dit antwoord .

Antwoord

Voor waarden groter dan de INT max (2.147.483.647), “wil je COUNT_BIG (*) gebruiken.

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

Als het gebeurt in de SUM, moet u Amount converteren naar een 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; 

Antwoord

Dit probleem wordt veroorzaakt door SUM() functie

je moet t.Amount als 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; 

Referentie

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *