반응형
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을 표준으로 해놓고, 컴파일 에러나게 했었으면 개발자들 실수가 좀 줄어들었을텐데..
반응형
'개발 > Database' 카테고리의 다른 글
[MariaDB] VirtualColumn (0) | 2016.06.10 |
---|---|
[MSSQL] SQL_Latin1_General_CP1_CI_AS 에서 한글이 ??? 로 보이는 경우 (0) | 2016.06.10 |
[Mysql] 5.5 패키지 설치 (CentOS 6.5) (0) | 2016.06.10 |
[Mysql] phpMyAdmin 여러대의 Mysql 서버관리 (0) | 2016.06.10 |
[Mysql] local-infile (0) | 2016.06.10 |