DB/MSSQL
[MSSQL] ANSI_WARNING 정리
codingD
2020. 1. 29. 20:58
구문
SET ANSI_WARNINGS { ON | OFF }
조건에 적용
ON 일 경우 | OFF 일 경우 | |
집계 함수에 NULL 값이 있을 때 |
경고 메세지 발생 | 경고 메세지 발생X |
0으로 나누거나 산술 오버츨로 오류 발생 |
롤백되고 오류메세지 생성 | NULL 반환 |
새 값의 길이가 열의 최대 크기를 초과하는 CHARACTER, UNICODE, BINARY 열에 INSERT 나 UPDATE 작업 |
INSERT나 UPDATE 취소 | 0으로 나누기 또는 산술 오버플로 오류로 인해 NULL 반환 |
문자열 |
후행 공백, 이진 열에 대해서는 후행 NULL 값이 무시 |
열의 크기에 맞게 데이터가 잘리고 문이 성공적으로 실행 |
참고
- binary 또는 varbinary 데이터로 또는 그 역으로의 변환에서 잘림이 일어날 때는 set 옵션에 상관없이 경고나 오류가 생성되지 않음
- 저장 프로시저 또는 사용자 정의 함수에 매개 변수를 전달할 때 또는 일괄 처리 문에서 변수를 선언하고 설정할 때 ANSI_WARNINGS 는 인식되지 않음
- 예) 변수가 CHAR(3)으로 정의된 경우 3자보다 큰 값으로 설정하면 정의된 크기로 데이터가 잘리고 INSERT 또는 UPDATE 문이 성공함
- sp_configure의 user options를 사용하여 서버의 모든 연결에 대해 ansi_warnings의 기본값을 설정가능
- SET ANSI_WARINGS ON : 계산 열이나 인덱싱된 뷰에서 인덱스를 만들거나 조작할 때 / 분산쿼리 실행
- SET ANSI_DEFAULTS ON이면 SET ANSI_WARNINGS 옵션이 설정
- SET ANSI_WARNINGS 옵션 : 실행시, 또는 런타임에 설정며 구문 분석 시에는 설정되지 않음
- SET ARITHABORT 옵션이나 SET ARITHIGNORE 옵션 중 하나가 OFF 이고, SET ANSI_WARNINGS 옵션이 ON이면 SQL Server 에서 0으로 나누기 또는 오버플로 오류가 발생할 경우 여전히 오류 메세지 반환