programing

SQL Server가 데이터 유형 숫자로 변환하는 산술 오버플로 오류를 발생시키는 이유는 무엇입니까?

instargram 2023. 7. 6. 21:47
반응형

SQL Server가 데이터 유형 숫자로 변환하는 산술 오버플로 오류를 발생시키는 이유는 무엇입니까?

다음 코드를 실행할 때 SQL Server Management Studio에서 오류가 발생했습니다.

declare @percentage numeric(3,2)
set @percentage = cast(15 as numeric(3,2))

하지만 숫자 선언을 바꿀 때는

declare @percentage numeric(4,2)
set @percentage = cast(15 as numeric(4,2))

만사가 순조롭습니다

숫자 데이터 유형에 제한이 있습니까?

숫자는 총 자릿수를 정의한 다음 소수 뒤에 오는 숫자를 정의합니다.

숫자(3,2)는 최대 9.99까지 유지할 수 있습니다.

숫자(3,2)를 보겠습니다.즉, 데이터를 저장할 수 있는 자리가 세 개이고 그 중 두 개는 소수점 오른쪽에 있고 나머지 한 개는 소수점 왼쪽에 있습니다.15는 소수점 왼쪽에 두 자리가 있습니다.BTW 만약 당신이 100을 값으로 가질 수 있다면 나는 그것을 숫자 (5, 2)로 늘릴 것입니다.

NUMERIC(3,2)평균: 소수점 다음에 두 자리, 총 세 자리입니다.따라서 소수점 앞에는 소수점이 하나만 있습니다.

해라NUMERIC(5,2)소수점 앞에 세 개, 뒤에 두 개.

정밀도와 척도는 종종 오해를 받습니다.숫자(3,2)에서는 전체적으로 3자리를 원하지만 소수점 오른쪽에는 2자리를 원합니다.15 => 15.00을 원할 경우 선행 1이 오버플로를 유발합니다(소수점 오른쪽에 2자리를 원할 경우 왼쪽에 한 자리만 더 사용할 수 있습니다).4,2의 경우 4자리 숫자가 모두 맞기 때문에 문제가 없습니다.

꽤 오래된 질문이지만 완성을 위해 여기에 추가해야겠다고 생각했습니다.쿼리에 영향을 주고 이 오류를 발생시킬 수 있는 SQL Server 데이터베이스 설정이 있습니다.

SET NUMERIC_ROUNDABORT { ON | OFF }

이 값을 ON으로 설정하면 결과가 결과 데이터 유형에 맞지 않는 경우 이 오류가 발생합니다.

예를 들어, 이 설정을 ON으로 설정하고 실행 중인 경우

SELECT cast(0.0 / 1 AS NUMERIC(4,2))

이 오류를 발생시킵니다.

추가 정보: https://learn.microsoft.com/en-us/sql/t-sql/statements/set-numeric-roundabort-transact-sql

설정하는 다른 방법:

언급URL : https://stackoverflow.com/questions/2059134/why-sql-server-throws-arithmetic-overflow-error-converting-int-to-data-type-nume

반응형