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