2010-04-13 3 views
1

Я пытаюсь написать инструкцию insert для таблицы SQL Server, которая вставляет значение 1 в десятичное поле. Поле имеет тип decimal (10, 10), который, насколько я понимаю, означает, что он может иметь до 10 цифр в целом, и до десяти из этих цифр может быть после десятичной точки. Но, когда я пытаюсь запустить оператор вставки, я получаю следующее сообщение об ошибке:Почему я не могу ввести целочисленное значение в десятичное поле?

Arithmetic overflow error converting int to data type numeric. 

Если изменить тип данных поля в десятичном (11, 10), он вдруг работает. Что я здесь не понимаю? Что я делаю не так?

ответ

12

decimal(10, 10) означает все десятичные разряды, без цифр слева от десятичной точки!

посмотреть здесь: http://msdn.microsoft.com/en-us/library/aa258832(SQL.80).aspx_

decimal[(p[, s])]

p (precision) Specifies the maximum total number of decimal digits that can be stored, both to the left and to the right of the decimal point. The precision must be a value from 1 through the maximum precision. The maximum precision is 38. The default precision is 18.

s (scale) Specifies the maximum number of decimal digits that can be stored to the right of the decimal point. Scale must be a value from 0 through p. Scale can be specified only if precision is specified. The default scale is 0; therefore, 0 <= s <= p. Maximum storage sizes vary, based on the precision.

decimal(11,10) дает 1 цифра слева от десятичной и 10 вправо, так целое число 1 подходит сейчас

EDIT

при использовании: decimal(p,s), думать о p, как, сколько общей цифры (независимо от того, слева или справа от десятичной точки) вы хотите сохранить, и s сколько из этих p цифр должны справа от десятичной точки.

DECIMAL(10,5)=  12345.12345 
DECIMAL(10,2)= 12345678.12 
DECIMAL(10,10)=   .1234567891 
DECIMAL(11,10)=  1.1234567891 
+0

Я все еще смущен. В нем говорится, что масштаб является «* максимальным * числом десятичных цифр, которые могут храниться справа от десятичной точки» - не то, что должно быть 10. – froadie

+1

Да, но это не значит, что это скользящая десятичная точка. Импликация заключается в том, что вы предоставляете меньше 10 цифр справа, остальные - нули. – Joe

+0

@Joe, я не уверен точно, что вы пытаетесь сказать, но если вы запустите 'declare @x decimal (5,2), установите @ x = 1.123456789, выберите @x; установите @ x = 1; выберите @ x' вы получите '1.12' и' 1.00'. Когда вы объявляете десятичное число, число цифр слева и справа от десятичной точки фиксировано, сдвиг десятичной точки не происходит. –

Смежные вопросы