WHERE 1=1

2022-02-23

WHERE 1=1 정리하기 위해 작성한 내용이다.


상황 설명

테이블 설명

프로젝트를 하다가 기존에 작성된 SP를 확인하다가,

“Where 1=1”라고 작성된 부분을 발견했다.

왜 사용하는가?

WHERE 1=1 은 언제나 ‘참’이라는 뜻이다.

뒤에 어떠한 조건구문이든 1=1 은 언제나 참이기 때문에

AND 를 붙여가며 조건구문을 붙일 수 있다.

주로 SP에서 동적으로 변하는 인자 값들에 따라

조건식을 사용하는 SQL 문이 필요할 때 사용했다.

기존에 사용하던 테이블을 이용해

SQL문을 출력하는 SP를 만들어 보았다.

SP

@UserName@UserId을 인자로 받아서

가변적이게 SQL문의 뒤에 AND 이후의 조건들이 붙는다.

그리고 출력을 하는 예시이다.

추가로

주로 조건에 의해 검색하는 Select문의 SP를 생성할 때

사용하는구나 하고, 궁금해서 더 찾아보니

Update와 Delete문에 사용할 때는 다들 주의한다고 한다.

왜 “주의”해야하는가?

Update 또는 Delete에서

“아무런 예외 처리가 없다는 가정”으로

NULL을 받는 WHERE 1=1을 사용하면 다음처럼 된다.

만약

예시로는 Select문을 사용했지만

조건이 모두 참인 SQL이 Print 되는것을 볼 수 있다.

Update나 Delete를 사용한다면

모두가 삭제되거나 모두가 갱신되는 모습을 볼 수 있다.

“다시한번 느끼는 예외 처리의 중요성”

참고링크 :

[MSSQL] WHERE 1=1이 뭐야?

Okky 관련링크