Arithmetic overflow error converting varchar to data type numeric. '10' <= 9.00
This generates an Arithmetic Overflow because it is trying to implicitly cast the
Val column to a NUMERIC(3,2), which naturally will overflow on a 2-digit value like 10.
It's using NUMERIC(3,2) as the target type and size because that is the smallest numeric that
9.00 appears to fit into.
The solution, of course, is to use explict CASTing instead of doing it implicitly
In Transact-SQL statements, a constant with a decimal point is automatically converted into a numeric data value, using the minimum precision and scale necessary. For example, the constant 12.345 is converted into a numeric value with a precision of 5 and a scale of 3.
That means your constant
9.00 will have
a precision of 1 and a scale of 0 a precision of 3 and a scale of 2, so it cannot store the value
10, which needs a minimum precision of
2 + scale.
You'll need to wrap the
IntsOnly.Val with either a
CONVERT to specify the correct precision and scale.