2011-02-15 1 views
3

저장 프로 시저를 호출 할 때 오류가 발생하는 이유는 무엇입니까?저장 프로 시저의 정수에 정수를 전달할 때 오류가 발생하는 이유는 무엇입니까?

exec dbo.foo 100 

을하지만,이 작품 :

이 실패

exec dbo.foo 99 

정의 :

CREATE PROCEDURE dbo.foo 
(
    @latitude DECIMAL (16,14) 
) 
AS 
BEGIN 
    PRINT 'OK' 
END 

오류 메시지 :

Msg 8114, Level 16, State 1, Procedure foo, Line 0 
Error converting data type int to decimal. 
+2

2 개의 EXEC는 동일합니까? – gbn

+0

정확합니다. 고정 된 질문 – MedicineMan

답변

12

십진수 (16,14) means "16 digits, 14 after decimal point". 즉, 소수점 인 앞에는 2 을 의미합니다. "100"은 3 개 개의 숫자이기 때문에 내가 실패 한 작동 코드의 차이를 볼 수 없습니다

빠른 예를 ... 범위를 벗어

DECLARE @fail decimal(16, 14), @pass decimal(17, 14) 

BEGIN TRY 
    SET @pass = 100 
END TRY 
BEGIN CATCH 
    PRINT 'Will not see this' 
END CATCH 

BEGIN TRY 
    SET @fail = 100 
END TRY 
BEGIN CATCH 
    PRINT 'Will see this' 
END CATCH 
3

이지만, 둘 다 실패해야합니다. DECIMAL 데이터 형식의 첫 번째 매개 변수는 해당 숫자가 가질 수있는 최대 자릿수입니다. 두 번째 매개 변수는 소수점 오른쪽의 숫자에 예약 된 자릿수입니다. 따라서 DECIMAL(16,14)으로 100을 가질 수 없으며 단지 99.99999999999999입니다.