case 문이있는 SQL 쿼리가 있습니다. case 문은 두 개의 정수 값을 더하고 그 합이 다른 int 유형 변수에 다시 할당하기 위해 sql에서 허용하는 최대 정수 값보다 작은 지 확인합니다 (단순화를 위해 예제에서 반올림 됨). 두 값이 추가되는 WHEN 문에서 sum 값이 sql max allowed integer보다 크기 때문에 전체 문에서 SQL 산술 예외가 발생합니다. I는 두 정수 값을 추가 할 때 내부에서 합계 값을 임시 정수 변수에 배치 같은데 .. 예두 개의 큰 int 값을 추가하는 조건이있는 SQL case 문
Declare @int1 as Int =2147483598
Declare @int2 as Int =2147483598
Declare @int3 as Int =0
DECLARE @MaxIntValue INT = 2147483600
set @int3 = (CASE WHEN (@int1 < 2)
THEN @int1
WHEN ((@int1 + @int2) < @MaxIntValue)
THEN @int1 + @int2
ELSE @int1
END)
select @int3
가 나는 변수 중 하나의 유형을 변경하면 곳 주변 작업을 발견 BIGINT 대신 은 (즉,
Declare @int1 as bigint =2147483598
) 내가 다시 지금 내부적으로 합계 값을 보유하는 데 사용되는 변수의 데이터 유형을 가정하고 있기 때문에 문제가 해결 뿐만 아니라 A 형 BIGINT로 변경됩니다. 현실적으로이 쿼리는이 값들이 조달되는 곳의 여러 테이블을 포함하는 훨씬 더 크고 복잡한 저장 프로 시저의 일부이기 때문에이 솔루션을 피하고 싶습니다. 감사합니다.
을 BIGINT 캐스팅하려고? 해결 방법이 있어요 .. 뭐가 잘못 됐어요, 정확히 요? – Blorgbeard
이 case 문은 실제로 큰 저장된 proc의 일부이며 두 테이블의 필드가 병합되고이 CASE 문을 기반으로 필드 중 하나가 업데이트되는 MERGE 문 안에 캡슐화됩니다. 이 예제에서 사용한 정수 값은 테이블에서 직접 가져온 것이므로 가장 간단한 솔루션이라고 생각하지 않는 테이블의 데이터 유형을 변경해야합니다. – Shegute
왜 변수를 bigint로 캐스트하지 않습니까? –