2010-04-13 3 views
1

값 1을 십진수 필드에 삽입하는 SQL Server 테이블에 대한 insert 문을 작성하려고합니다. 이 필드는 10 진수 유형 (10, 10)으로, 이해하는 한 최대 10 자리까지 올 수 있으며 소수점 이하 10 자리까지 올 수 있습니다. 나는 다음과 같은 오류가 삽입 문을 실행하려고 할 때, : 나는 진수 할 필드 (11, 10)의 데이터 유형을 변경하는 경우10 진수 필드에 정수 값을 입력 할 수없는 이유는 무엇입니까?

Arithmetic overflow error converting int to data type numeric. 

을 갑자기 작동합니다. 나는 여기서 무엇을 이해하지 못 하겠는가? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

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은 지금에 맞는 :

여기보세요! 사용하는 경우

편집

을 : decimal(p,s)를,로 p 생각 얼마나 많은 총 자릿수 (에 관계없이 왼쪽 또는 소수점 오른쪽의) 당신이 저장하고 싶은 sp 숫자의 몇으로해야 소수점의 오른쪽에있다.

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

저는 여전히 혼란 스럽습니다. 스케일은 "소수점의 오른쪽에 저장할 수있는 * 최대 * 소수점 수"라고 말합니다. 즉, 10이되어야하는 것은 아닙니다. – froadie

+1

그렇습니다. 그러나 슬라이딩 소수점을 의미하지는 않습니다. 그 의미는 오른쪽에 10 자리 미만을 제공하면 나머지는 0입니다. – Joe

+0

@Joe, 당신이 무엇을 말하려고하는지 정확히 모르겠지만'declare @x decimal (5,2); @ x = 1.123456789를 설정하고 @x를 선택하고 @ x를 1로 설정하고 @ x'는'1.12'와'1.00'을 얻을 것입니다. 소수점을 선언하면 소수점 왼쪽과 오른쪽의 자릿수가 고정되고 소수점은 슬라이딩되지 않습니다. –