Почему я не могу ввести целочисленное значение в десятичное поле? - PullRequest
1 голос
/ 13 апреля 2010

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

Arithmetic overflow error converting int to data type numeric.

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

1 Ответ

12 голосов
/ 13 апреля 2010

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

см. Здесь: http://msdn.microsoft.com/en-us/library/aa258832(SQL.80).aspx_

десятичный [(p [, s])]

p (точность) Указывает максимальное общее количество десятичных цифр которые могут быть сохранены, как слева и справа от десятичной точки. Точность должна быть от 1 через максимальную точность. максимальная точность 38. По умолчанию точность 18.

с (масштаб) Указывает максимальное количество десятичных цифр, которое может быть хранится справа от десятичной точка. Масштаб должен быть значением от 0 через стр. Масштаб может быть указан только если указана точность. По умолчанию шкала 0; следовательно, 0 <= s <= p. Максимальные размеры хранилища варьируются в зависимости от точность. </p>

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
...