SQL Server gibt die Frage “ Arithmetischer Überlauffehler beim Konvertieren des Ausdrucks in den Datentyp int zurück. ”

Wenn ich diesen Befehl mit SUM()

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

ausführe, erhalte ich

Arithmetic overflow error converting expression to data type int. 

Irgendeine Idee, was die Ursache dafür ist?

Ich folge nur den Anweisungen in diese Antwort .

Antwort

Für Werte größer als INT max (2.147.483.647), Sie möchten COUNT_BIG (*) verwenden.

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

Wenn dies in SUM geschieht, müssen Sie Amount in eine .

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

Antwort

Dieses Problem wird verursacht durch SUM() Funktion

Sie müssen 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; 

Referenz

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.