Подтвердить что ты не робот

Как предотвратить ошибку арифметического переполнения при использовании столбца 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.

4b9b3361

Ответ 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