일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- MSsql
- .net
- 하남
- 맛집
- 티스토리
- Google Map
- 박근혜 탄핵
- 신장사거리
- 최신트래커
- 카카오가 찾아준 헤어샵
- 함수
- javascript
- 트래커
- 초대장
- db
- 국정화
- jquery
- 술안주
- 카카오헤어샵
- 재테크
- 파리바게트 청라 SK점
- 동적쿼리
- Lock
- 토렌트
- 하남맛집
- 파리바게트
- 국정화 반대
- 내장함수
- C#
- 트레커
- Today
- Total
featur
[MSSQL] 0으로 나누기 오류 발생 관련 설정 본문
[MSSQL] 0으로 나누기 오류 발생 관련 설정
출처 : http://blog.naver.com/cana01/130170171710
오랜만에 통계성 쿼리를 짜다 발생한 0 나누기 오류.
순간 당황한 것이 0으로 나눗셈은 오라클에서는 NVL로 처리를 했었던가?
그 기억조차 가물가물하다는 점이다.
결과론적으로는 MSSQL 에선 set 선언을 해주어야 한다.
SET ANSI_WARNINGS OFF
SET ARITHIGNORE ON
SET ARITHABORT OFF
SELECT 나눗셈~ FROM
먼저
SET ANSI_WARNINGS OFF
- 집계오류가 발생해서 메세지가 발생할 경우 그 것을 레코드로 인식해서 에러가 뜨므로 메세지 경고를 off시킨다
그 다음에
SET ARITHIGNORE ON
- 쿼리 실행 중 오버플로 또는 0으로 나누기 오류에서 오류 메시지를 반환할지 여부를 제어
오류 메시지가 반환될지 여부만 제어하며 이 설정에 상관 없이 오버플로 또는 0으로 나누기 오류를
발생시킨 계산에 NULL을 반환한다. 없는 값 처리를 해야하므고 오류를 발생시킨 것에서 null 반환을 받아야 한다!
SET ARITHABORT ON이면 오버플로 또는 0으로 나누기 오류 발생 시 쿼리나 일괄 처리가 종료
트랜잭션에서 해당 오류가 발생하면 트랜잭션이 롤백시킨다. 그러나 이 설정이 INSERT, UPDATE, DELETE 문 실행 중에
발생한 오류에는 영향을 주지 않는다.
오류가 난 것은 위에서 NULL로 반환시켜주었고, 하위 쿼리들을 계속 해주어야 하므로
SET ARITHABORT OFF 선언!
MSSQL SET 명령어가 제법 많다는 사실에 충격!
그리고 지금까지 그것을 제대로 쓰지않고 작업했다는 사실에 더 충격!
또한 이 쿼리가 호환성 어디부터 지원해주는지는 모르긋다에 더더더 충격!
'개발 > MSSQL' 카테고리의 다른 글
[MSSQL] 피벗 PIVOT 세로데이터 가로출력 (0) | 2015.11.04 |
---|---|
[MSSQL] SQL Server Management Studio 단축키 (0) | 2015.11.04 |
[mssql] round, ceiling 차이점 (0) | 2015.11.04 |
[mssql] DB 파일 사이즈 줄이기 (SHRINKDATABASE .... ) (0) | 2015.11.04 |
[mssql] 클러스터드 / 넌 클러스터드 인덱스 (0) | 2015.11.04 |