繁体   English   中英

错误:将varchar转换为数值类型的算术溢出错误

[英]Error: Arithmetic overflow error converting varchar to data type numeric

select distinct f1.[record] from [field] f1 where ((ABS((Cast((Select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay1_read1')) as Decimal(5,3))) - (Cast((select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay1_read2')) as Decimal(5,3)))) > 1.0) 
or (ABS((Cast((Select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay2_read1')) as Decimal(5,3))) - (Cast((select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay2_read2')) as Decimal(5,3)))) > 1.0) 
or (ABS((Cast((Select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay3_read1')) as Decimal(5,3))) - (Cast((select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay3_read2')) as Decimal(5,3)))) > 1.0) 
or (ABS((Cast((Select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay4_read1')) as Decimal(5,3))) - (Cast((select [value] from dbo.getFieldTopTable(f1.[record], 'ar_essay4_read2')) as Decimal(5,3)))) > 1.0))

这些字段中存储的数据是真实设置的,值范围从.001到4.00(应该是int吗?)

我们正试图查找2个分数之差大于1的记录

我们还尝试了将_强制转换为十进制,但没有精确度,并且省略了应该在查询中的记录...

有什么我们不考虑的吗?

您根本不需要dbo.getFieldTopTable()这些值,问题很可能是dbo.getFieldTopTable()函数返回的值的数据类型。 确保它返回带小数的值。

小数点右边的数字不应引起截断错误。 尝试DECIMAL(9,3)。 那消耗的内存与DECIMAL(5,3)相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM