티스토리 뷰

Computer/Databases

[MSSQL 2005] SET ANSI_NULLS ON

인생이글케쉬우냐 2009. 9. 14. 11:18
[출처 : http://blahblah.springnote.com/pages/1007566?print=1]
SET ANSI_NULLS ON

http://technet.microsoft.com/ko-kr/library/ms188048.aspx - SET ANSI_NULL

http://technet.microsoft.com/ko-kr/library/ms175088.aspx - 결과에 영향을 주는 SET 옵션

 

분산 쿼리를 실행할 때는 SET ANSI_NULLS를 ON으로 설정해야 합니다.

 

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

 

SET ANSI_NULLS 옵션은 실행 시간 또는 런타임에 설정되며, 구문 분석 시에는 설정되지 않습니다.

 

참고
ANSI_NULLS 는 계산 열이나 인덱싱된 뷰의 인덱스를 처리할 때 필요한 값으로 설정해야 하는 7가지 SET 옵션 중 하나입니다. ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, QUOTED_IDENTIFIER 및 CONCAT_NULL_YIELDS_NULL은 ON으로 설정해야 하지만 NUMERIC_ROUNDABORT는 OFF로 설정해야 합니다.

 

※  데이터베이스를 생성할 때 (or 생성하고 난 뒤 property 볼 때) ARITHABORT, ANSI_NULLS, QUOTED_IDENTIFIER, ANSI_WARNINGS 등은 모두 켜주도록 하자. 아니면 DB 생성코드에 다음과 같이 명시할 것.

  1. ALTER DATABASE [CAMarket0] SET ARITHABORT ON
    GO
    ALTER DATABASE [CAMarket0] SET ANSI_PADDING ON
    GO
    ALTER DATABASE [CAMarket0] SET ANSI_WARNINGS ON
    GO
    ALTER DATABASE [CAMarket0] SET ANSI_NULLS ON
    GO
    ALTER DATABASE [CAMarket0] SET QUOTED_IDENTIFIER ON
    GO
    ALTER DATABASE [CAMarket0] SET ANSI_WARNINGS ON
    GO

이렇게 해야 이 이후 생성되는 모든 Database Objects들에 해당 기본설정이 적용됨 (인생살이가 좀 더 편해짐)

또한 모든 프로시저들의 첫 시작 부분에 (CREATE PROCEDURE 전) ANSI_NULLS ON, QUOTED_IDENTIFIER ON을 명시해주도록 하자.

 

※ SQL Server 2000의 EM에서는 프로시저 변경시 CREATE / ALTER 앞의 SET 설정들이 보이지 않게 되므로, 프로시저 코드에 대해서는 가급적 QA에서 sp_helptext 등을 이용하여 확인할 것.

 

현재 세션의 SET 옵션 값은 SELECT SESSIONPROPERTY('ANSI_NULLS') 와 같이 볼 수 있다
반응형