# 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

From BOL:

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 `CAST`

or `CONVERT`

to specify the correct precision and scale.

TRY THIS...IT WORKED FOR ME

` CAST(CAST(@UR_VARIABLE AS FLOAT) AS NUMERIC(3,2))`