我在一个简单的 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 CHECKDB和DATA_PURITY特别是该选项。
| 归档时间: |
|
| 查看次数: |
529 次 |
| 最近记录: |