Bienvenido a nuestra comunidad, ahora hallarás la resolución a lo que andabas buscando.
Solución:
Esto genera un desbordamiento aritmético porque está tratando de convertir implícitamente el Val
columna a un NUMÉRICO (3,2), que naturalmente se desbordará en un valor de 2 dígitos como 10.
Está usando NUMERIC(3,2) como el tipo y tamaño de destino porque ese es el número más pequeño que 9.00
parece encajar.
La solución, por supuesto, es usar CASTing explícito en lugar de hacerlo implícitamente.
Desde BOL:
En las instrucciones Transact-SQL, una constante con un punto decimal se convierte automáticamente en un valor de datos numéricos, utilizando la precisión y la escala mínimas necesarias. Por ejemplo, la constante 12,345 se convierte en un valor numérico con una precisión de 5 y una escala de 3.
Eso significa que tu constante 9.00
tendrá una precisión de 1 y una escala de 0 una precisión de 3 y una escala de 2, por lo que no puede almacenar el valor 10
que necesita una precisión mínima de 2 + scale
.
Tendrás que envolver el IntsOnly.Val
con un CAST
o CONVERT
para especificar la precisión y la escala correctas.