web-dev-qa-db-fra.com

SQL Server renvoie «Erreur de dépassement arithmétique lors de la conversion de l'expression en type de données int.»

Lorsque j'exécute cette commande avec SUM()

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

Je suis en train,

Arithmetic overflow error converting expression to data type int.

Une idée sur quelle en est la cause?

Je suis juste en train de suivre les instructions de cette réponse .

21
Evan Carroll

Pour les valeurs supérieures à INT max (2 147 483 647), vous voudrez utiliser 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;

Si cela se produit dans le SUM, vous devez convertir Amount en 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;
27
Erik Darling

Ce problème est dû à la fonction SUM()

vous devez CAST t.Amount comme 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;

Référence

11
m.geagea