我在一个简单的SELECT语句中遇到了算术溢出。查询如下
SELECT [SaleValue] FROM Sales
[SaleValue]
是数据类型,decimal(9,0)
而不是计算列。
发生这种情况的原因是,由于某种原因,该列在该字段存储的行大于指定的数据类型(例如)decimal(10,0)
。
当我增加列的大小时,我只能使选择工作。所讨论的表在其他两个列和行中还有两个其他实例。
这种情况怎么可能?首先,如何将超出范围的值保存在列中?
我正在使用Microsoft SQL Server,这是一个基表,而不是视图。
1
我认为可能迫使这种情况发生的唯一可能方法是通过DAC编辑系统表-这是一个相当暴力的过程,希望有人能够告诉您是否已对该数据库进行了处理。即使那样,我也不确定它是否会很好地解决(甚至可能)。除此之外,我们确实需要一个repro脚本来亲自了解这种情况,我怀疑如果可能的话,创建repro可能会很容易地花费数年的时间。
—
Damien_The_Unbeliever
更糟的是,只是想起9/10是的存储大小割接点
—
Damien_The_Unbeliever
decimal
-一个decimal(9,0)
应占据5个字节,一个decimal(10,0)
9所以我认为这是不太可能,你可以通过编辑系统表,因为你不会有这样做每行中数据的正确存储大小。