Encontrei um estouro aritmético em uma instrução SELECT simples. A consulta foi como abaixo, por exemplo
SELECT [SaleValue] FROM Sales
[SaleValue]
era do tipo de dados decimal(9,0)
e não uma coluna computada.
O motivo disso aconteceu porque, de alguma forma, a coluna tinha uma linha em que esse campo estava armazenando um valor MAIS GRANDE que o tipo de dados especificado, por exemplo decimal(10,0)
.
Só consegui que o select funcionasse quando aumentava o tamanho da coluna. A tabela em questão possui outras duas instâncias em outras duas colunas e linhas.
Como essa situação foi possível? Como um valor fora do intervalo foi salvo na coluna em primeiro lugar?
Estou usando o Microsoft SQL Server + esta é uma tabela base, não uma exibição.
decimal
- umdecimal(9,0)
deve ocupar 5 bytes, umdecimal(10,0)
9. Portanto, acho que é menos provável que você possa fazer isso editando as tabelas do sistema, pois não terá o tamanho de armazenamento correto para os dados em cada linha.Respostas:
Isso pode acontecer de várias maneiras, por exemplo, conforme descrito em Solucionando problemas de erro DBCC 2570 no SQL Server 2005 e versões posteriores :
Esse artigo contém muitas informações úteis sobre o tópico. Para o básico, consulte a documentação
DBCC CHECKDB
e aDATA_PURITY
opção em particular.fonte