Temos um procedimento armazenado que usa SUM
uma coluna Int na SELECT
instrução. Temos alguns casos em que, para um dos valores de parâmetro, a SUM (coluna inteira) excede o intervalo Int e, portanto, gera um erro
Erro de estouro aritmético ao converter expressão em tipo de dados int
A solução para isso seria converter a coluna em bigint na função sum, ou seja, Sum(Convert(BigInt, column))
. Mas como isso está acontecendo para alguns casos específicos neste momento e não para todos os casos, estou preocupado em acabar penalizando os outros casos em que essa conversão não é necessária. Quanta diferença de desempenho a conversão costuma fazer? Existe alguma outra maneira de lidar com esse problema? Obrigado!
É improvável que o custo da conversão seja significativo no contexto de toda a consulta. O pior cenário é
SELECT SUM(CONVERT(bigint, integer_column)) FROM HugeTable;
, mas, uma vez que você introduz junções adicionais e outras cláusulas, o custo de conversão rapidamente se torna uma porcentagem insignificante do custo geral do recurso.Pode-se evitar a conversão explícita alterando a coluna int para bigint. Isso tem prós (evita conversão para todas as consultas) e contras (4 bytes adicionais por linha).