정수 곱셈의 SELECT
이 실패하는 이유를 설명 할 수 있습니까? 선택 1024 * 1024 * 1024 * 1024가 실패합니다.
SELECT 1024*1024*1024*1024 -- ERROR
인해
INT
데이터 형 임계 값보다 더 큰되고 곱셈 결과에인가? 식을 int 데이터 형식 변환
DECLARE @VAL AS BIGINT
SET @VAL = 1024 -- OK
SET @VAL = 1024*1024 -- OK
SET @VAL = 1024*1024*1024 -- OK
SET @VAL = 1024*1024*1024*1024 -- ERROR
SET @VAL = 1099511627776 -- OK - 1024*1024*1024*1024=1099511627776
SET @VAL = CAST((1024*1024*1024*1024) AS BIGINT) -- ERROR
오류 메시지
산술 오버플로 오류.
int, bigint, smallint, and tinyint (Transact-SQL)
주의
사용하는 경우 +, -, *,/또는 % 산술 연산자의 암시 적 또는 명시 적 변환을 수행하기 위해 INT, SMALLINT, TINYINT, 또는 float, real, decimal 또는 numeric 데이터 형식에 bigint 상수 값을 사용하면 쿼리가 자동 매개 변수화되었는지 여부에 따라 SQL Server에서 데이터 형식과 식 결과의 정밀도를 계산할 때 적용되는 규칙이 달라집니다.
따라서 쿼리의 비슷한 표현식은 때로는 다른 결과를 생성 할 수 있습니다. 쿼리가 자동 매개 변수화되지 않은 경우 상수 값은 먼저 숫자로 변환됩니다.이 정밀도는 지정된 데이터 형식으로 변환하기 전에 상수 값을 보유 할만큼 충분히 큽니다. 예를 들어 상수 값 1은 숫자 (1, 0)로 변환되고 상수 값 250은 숫자 (3, 0)로 변환됩니다.
쿼리가 자동 매개 변수화 될 때 상수 값은 최종 데이터 형식으로 변환하기 전에 항상 숫자 (10, 0)로 변환됩니다./연산자가 관련 될 때 결과 유형의 정밀도가 유사한 쿼리간에 다를 수있을뿐만 아니라 결과 값도 다를 수 있습니다. 예를 들어 SELECT CAST (1.0/7 AS float)식이 포함 된 자동 매개 변수가 지정된 쿼리의 결과 값은 자동 매개 변수가 지정되지 않은 동일한 쿼리의 결과 값과 다를 수 있습니다. 자동 매개 변수가있는 쿼리의 결과가 적합하도록 잘립니다 숫자 (10, 0) 데이터 유형으로 변환하십시오.
이 그래, 즉 :
해결 방법은 같은 BIGINT의 varialbe에서 작업에 사용하는 번호를 저장 할 수 있습니다. –
오류 메시지가 매우 분명해 보입니다. - 표현식을 데이터 유형 int로 변환하는 산술 오버플로 오류. " 아마도 int는 32 비트이고 1024^4 == (2^10)^4 == 2^40은 32 비트 정수 (2^32) –
의 범위를 초과합니다. SELECT CAST (1024 AS BIGINT) * 1024 * 1024 * 1024' <- SQL Server는 10 진수 값 (1024)이없는 상수를 정수로 변환합니다. SQL Server에서 BIGINT를 사용하도록 명시 적으로 값 중 하나를 전송하십시오. – Pred