간단한 SELECT 문에서 산술 오버플로가 발생했습니다. 쿼리는 아래와 같습니다.
SELECT [SaleValue] FROM Sales
[SaleValue]데이터 유형이었으며 decimal(9,0)계산 열이 아닙니다.
이런 일이 발생한 이유는 열에이 필드에 지정된 데이터 유형보다 값이 GREATER 인 행이 있었기 때문입니다 (예 :) decimal(10,0).
열의 크기를 늘릴 때만 선택을 할 수있었습니다. 해당 테이블에는 두 개의 다른 열과 행에 다른 두 개의 인스턴스가 있습니다.
이 상황은 어떻게 가능 했습니까? 범위를 벗어난 값은 처음에 열에 어떻게 저장 되었습니까?
Microsoft SQL Server를 사용하고 있습니다. 이것은 뷰가 아닌 기본 테이블입니다.
1
내가 이것을 강제로 생각할 수있는 유일한 방법은 DAC를 통해 시스템 테이블을 편집하는 것입니다. 그럼에도 불구하고 그것이 잘 작동하는지 (또는 가능할 수도 있음) 확실하지 않습니다. 그 외에는 우리 자신을 위해이 상황을보기 위해 실제로 재현 스크립트가 필요하며 가능하다면 재현을 쉽게 만드는 데 몇 년이 걸릴 수 있습니다.
—
Damien_The_Unbeliever
더 나쁜, 단지 9/10의 저장 크기에 대한 컷 오버 포인트는 것을 기억
—
Damien_The_Unbeliever
decimal- A는 decimal(9,0)5 바이트하는 차지해야 decimal(10,0)내가 덜 가능성이 당신이 가지고 있지 때문에 시스템 테이블을 편집을 통해이 작업을 수행 할 수 있다고 생각합니다 그래서 9 각 행의 데이터에 대한 올바른 스토리지 크기