반응형

SP 작성 중 INT 변수에 NULL을 기본값으로 넣고, 

!= 로 NULL이 아닌지 체크를 하여, 다른 쿼리를 실행할 일이 생겼었음.


근데 잘 안되길래, 뭔가 이상하다 싶어서 아래와 같이 테스트를 해봤는데..


DECLARE @i INT = NULL
SELECT @i

IF @i = NULL
    BEGIN
        SELECT 2
    END
ELSE 
    BEGIN
        SELECT 3
    END



NULL이라고 제대로 찍히면서, 밑에 IF문에서는 ELSE로 들어가는 것이었다.


여기저기 물어보니 표준 문법이 아니라서, 조건에 일치하지 않을거다라고 답변을 받고,

SET ANSI_NULLS OFF 이 옵션을 상단에 넣어주면 제대로 동작할거다라고 원인파악을 했다.


근데 SET ANSI_NULLS OFF 이 옵션을 쓰면!!

인덱스가 걸려있는 테이블에서 뭔가를 변경할 때 실패한다고 한다.


그래서 항상 SET ANSI_NULLS 는 ON으로 써야하고,

IF @i IS NOT NULL과 같이 표준에 맞게 사용하는것으로 정리가 되었음.


이럴꺼면, SP만들때 컴파일 에러나게 처리하는게 어려웠을까라는 생각이 든다.

ON을 표준으로 해놓고, 컴파일 에러나게 했었으면 개발자들 실수가 좀 줄어들었을텐데..

반응형
,