Как предотвратить ошибку арифметического переполнения при использовании SUM в столбце INT? - PullRequest
27 голосов
/ 28 ноября 2011

Я использую SQL Server 2008 R2 , и у меня есть столбец INT, в котором вставленные данные никогда не превышают максимум INT, но у меня есть запрос, который использует функцию SUM, которая при Выполнено превышает максимальное значение INT и выдает ошибку, указанную в заголовке.

Я хочу иметь возможность выполнить этот запрос без изменения типа столбца с INT на BIGINT.

Вот мой запрос:

SELECT    UserId,
          SUM( PokemonExp )     AS TotalExp,
          MAX( PokemonLevel )   AS MaxPokeLevel

FROM      mytable

GROUP BY  UserId
ORDER BY  TotalExp DESC

Примечание: Столбец PokemonExp имеет тип INT.

Ответы [ 3 ]

56 голосов
/ 28 ноября 2011

Тип выражения в SUM определяет тип возвращаемого значения.

Попробуйте следующее:

SELECT    UserId,
          SUM( CAST( PokemonExp AS BIGINT ))  AS TotalExp,
          MAX( PokemonLevel )                 AS MaxPokeLevel

FROM      mytable

GROUP BY  UserId
ORDER BY  TotalExp DESC
1 голос
/ 28 ноября 2011

Вам не нужно менять тип столбца на BIGINT, чтобы получить правильную сумму.

Просто CAST или CONVERT PokemonExp до BIGINT до вы выполняете SUM следующим образом:

SUM( CAST( PokemonExp AS BIGINT ))
0 голосов
/ 22 июля 2015

Принятый тип выражения в SUM определяет тип возвращаемого значения.

Попробуйте следующее:

SELECT    UserId,
          SUM( CAST( PokemonExp AS BIGINT ))  AS TotalExp,
          MAX( PokemonLevel )                 AS MaxPokeLevel

FROM      mytable

GROUP BY  UserId
ORDER BY  TotalExp DESC
...