我有一个名为的表AssignmentMarks
,用于存储不同科目的学生作业分数。该表有一个称为Marks varchar(10)
存储标记的列。标记可以是1
, 2
, 也可以是+
,-
或-+
表示每个符号一个特定的标记。
注:+
is1
标记,-
is-1
和-+
is0.5
从表中获取学生分数时,我遇到了Arithmetic Overflow
错误,我不知道导致此错误的原因是什么。
查询如下:
SELECT SUM(
CAST(
CASE
WHEN a.Marks IS NULL OR a.Marks = '' THEN 0
WHEN a.Marks = '+' THEN 1
WHEN a.Marks = '-' THEN -1
WHEN a.Marks = '-+' THEN 0.5
ELSE a.Marks
END AS DECIMAL(5,2)
)
)
FROM AssignmentMarks AS a WHERE a.StudentID=10
AND a.SubjectID=1
执行上述查询后,出现以下错误。
消息 8115,第 16 层,状态 8,第 7 行
将 varchar 转换为数字数据类型的算术溢出错误。
知道这个错误的主要原因是什么吗?
示例数据: SQL Fiddle
从错误消息中,
我可以改变的第一个地方是:
并将其更改为
或转换为十进制,如果你想
稍后编辑:
如果表达式你有几个不同数据类型的 THEN:int、numeric、varchar。由于数据类型优先级,当组合不同的数据类型时,较低的数据类型会转换为具有较高优先级的类型,请参阅此处有关它的信息。
你可以通过这个例子看到这个: