SELECT 查询的算术溢出

9 sql-server

我在一个简单的 SELECT 语句中遇到了算术溢出。查询如下例如

SELECT [SaleValue] FROM Sales
Run Code Online (Sandbox Code Playgroud)

[SaleValue]是数据类型decimal(9,0)而不是计算列。

发生这种情况的原因是因为不知何故该列有一行,其中该字段存储的值大于指定的数据类型,例如decimal(10,0).

当我增加列的大小时,我只能让选择工作。有问题的表在另外两个列和行中有两个其他实例。

这种情况怎么可能?首先如何在列中保存超出范围的值?

我正在使用 Microsoft SQL 服务器 + 这是一个基表,而不是一个视图。

Pau*_*ite 15

这可以通过多种方式发生,例如SQL Server 2005 和更高版本中的 DBCC 错误 2570 故障排除中所述:

由于以下原因,早期版本的 SQL Server 数据库中可能存储了无效或超出范围的数据:

  • 使用大容量插入方法(例如 bcp 实用程序)时,源中存在无效数据。
  • 通过对 SQL Server 进行的 RPC 事件调用传递了无效数据。
  • 物理数据损坏的其他潜在原因使列值处于无效状态。

那篇文章包含许多关于该主题的有用信息。有关基础知识,请参阅文档DBCC CHECKDBDATA_PURITY特别是该选项。