Encontré un desbordamiento aritmético en una simple instrucción SELECT. La consulta fue como a continuación, por ejemplo
SELECT [SaleValue] FROM Sales
[SaleValue]
era de tipo de datos decimal(9,0)
y no una columna calculada.
La razón por la que esto sucedió fue porque de alguna manera la columna tenía una fila donde este campo almacenaba un valor MAYOR que el tipo de datos especificado, por ejemplo decimal(10,0)
.
Solo podía hacer que la selección funcionara cuando aumentaba el tamaño de la columna. La tabla en cuestión tiene otras dos instancias en otras dos columnas y filas.
¿Cómo fue posible esta situación? ¿Cómo se guardó un valor fuera de rango en la columna en primer lugar?
Estoy usando el servidor Microsoft SQL + esta es una tabla base, no una vista.
decimal
- adecimal(9,0)
debería ocupar 5 bytes, undecimal(10,0)
9. Por lo tanto, creo que es menos probable que pueda hacer esto editando las tablas del sistema ya que no tendrá El tamaño de almacenamiento correcto para los datos en cada fila.Respuestas:
Esto puede suceder de varias maneras, por ejemplo, como se describe en Solución de problemas del error DBCC 2570 en SQL Server 2005 y versiones posteriores :
Ese artículo contiene mucha información útil sobre el tema. Para lo básico, consulte la documentación
DBCC CHECKDB
y laDATA_PURITY
opción en particular.fuente