Как предотвратить ошибку арифметического переполнения при использовании столбца SUM в INT?
Я использую SQL Server 2008 R2, и у меня есть столбец INT
, где вставленные данные никогда не превосходят max INT
, но у меня есть запрос, который использует функцию SUM
, которая при выполнении превышает предел max INT
и выдает ошибку, указанную в заголовке.
Я хочу, чтобы этот запрос выполнялся без изменения типа столбца от INT
до BIGINT
.
Вот мой запрос:
SELECT UserId,
SUM( PokemonExp ) AS TotalExp,
MAX( PokemonLevel ) AS MaxPokeLevel
FROM mytable
GROUP BY UserId
ORDER BY TotalExp DESC
Примечание. Столбец PokemonExp
имеет тип INT
.
Ответы
Ответ 1
Тип выражения в SUM
определяет тип возвращаемого значения.
Попробуйте следующее:
SELECT UserId,
SUM( CAST( PokemonExp AS BIGINT )) AS TotalExp,
MAX( PokemonLevel ) AS MaxPokeLevel
FROM mytable
GROUP BY UserId
ORDER BY TotalExp DESC
Ответ 2
Вам не нужно менять тип столбца на BIGINT
, чтобы получить правильную сумму.
Просто CAST
или CONVERT
PokemonExp
до BIGINT
перед выполнением SUM
следующим образом:
SUM( CAST( PokemonExp AS BIGINT ))
Ответ 3
Принятый тип выражения в SUM
определяет тип возвращаемого значения.
Попробуйте следующее:
SELECT UserId,
SUM( CAST( PokemonExp AS BIGINT )) AS TotalExp,
MAX( PokemonLevel ) AS MaxPokeLevel
FROM mytable
GROUP BY UserId
ORDER BY TotalExp DESC