WorkaHolic/MSSQL

MSSQL ANSI_NULLS

2010. 2. 25. 16:48
반응형

구문

SET ANSI_NULLS { ON | OFF }

 

SET ANSI_NULLS 옵션이 ON인 경우, WHERE column_name = NULL을 사용하는 SELECT 문은 column_name에 Null 값이 있을 때도 0행을 반환합니다. WHERE column_name <> NULL을 사용하는 SELECT 문은 column_name에 Null이 아닌 값이 있을 때도 0행을 반환합니다.

 

SET ANSI_NULLS 옵션이 OFF면 Equals(=)와 Not Equal(<>) 비교 연산자가 ISO 표준을 따르지 않습니다. WHERE column_name =NULL을 사용하는 SELECT 문은 column_name에 Null 값이 있는 행을 반환합니다. WHERE column_name <> NULL을 사용하는 SELECT 문은 열에 Null이 아닌 값이 있는 행을 반환합니다. 또한 WHERE column_name <> XYZ_value를 사용하는 SELECT 문은XYZ_value가 아니고 NULL이 아닌 모든 행을 반환합니다.

 

계산 열이나 인덱싱된 뷰에서 인덱스를 만들거나 변경할 때는 SET ANSI_NULLS 옵션도 ON으로 설정해야 합니다. SET ANSI_NULLS 옵션이 OFF면 계산 열 또는 인덱싱된 뷰에 인덱스가 있는 테이블의 CREATE, UPDATE, INSERT 및 DELETE 문이 실패합니다. SQL Server는 필요한 값을 위반하는 모든 SET 옵션이 나열된 오류를 반환합니다. 뿐만 아니라 SELECT 문 실행 시 SET ANSI_NULLS 옵션이 OFF면 SQL Server는 계산 열이나 뷰의 인덱스 값을 무시하고 테이블이나 뷰에 이러한 인덱스가 없는 것처럼 SELECT 작업을 처리합니다.

 

-------------------------------------------------------------------

 

DB생성시나 프로시저 작성 전에 꼭 선언해 주도록 하자.

계산된 열 또는 인덱스된 뷰에서 인덱스를 만들거나 변경할 때도 필수~

 

Example >>

원본 테이블

 

ANSI_NULLS ON 설정시 (0 행을 반환)

select * from test where col2=null

 

ANSI_NULLS OFF 설정시 (Null행을 반환)

select * from test where col2=null

 

[출처] [MSSQL 2005] SET ANSI_NULLS|작성자 태즈

반응형