728x90

1=1 (항상 참)을 활용하여 WHERE절의 조건문을 특정 조건(ex. 사용자입력)에 따라 다르게 수행되도록 해줄 수 있다.

 

예시로,

SELECT * FROM TEST
WHERE CODE IN ('A', 'B')

이런 쿼리가 있는데 사용자가 Y를 입력할 때만 CODE IN ('A', 'B') 조건문을 실행하고

Y가 아니거나 입력하지 않는다면 

SELECT * FROM TEST

이렇게 실행되도록 하고싶은 경우.

 

-- 임시테이블 생성
CREATE TABLE #TEST(
	CODE	NVARCHAR(1)	NOT NULL
)

INSERT INTO #TEST VALUES('A')
INSERT INTO #TEST VALUES('B')
INSERT INTO #TEST VALUES('C')
INSERT INTO #TEST VALUES('D')
INSERT INTO #TEST VALUES('E')

---------------------------------- 
-- 임시 사용자입력 변수 선언
DECLARE @USER_INPUT NVARCHAR(1)

-- Y를 입력한 경우
SET @USER_INPUT = 'Y'

SELECT * FROM #TEST
WHERE
((@USER_INPUT = 'Y' AND CODE IN ('A', 'B')) -- OR 앞쪽 조건이 실행됨
OR (@USER_INPUT <> 'Y' AND 1=1))


-- Y가 아닌 경우
SET @USER_INPUT = ''

SELECT * FROM #TEST
WHERE
((@USER_INPUT = 'Y' AND CODE IN ('A', 'B'))
OR (@USER_INPUT <> 'Y' AND 1=1)) -- OR 뒤쪽 조건이 실행됨
----------------------------------
-- DROP TABLE #TEST

 

결과

 

이런 식으로 응용할 수 있음

SELECT * FROM #TEST
WHERE
((@USER_INPUT = 'Y' AND CODE IN ('A', 'B')) 
OR (@USER_INPUT = 'N' AND CODE = 'C') 
OR (ISNULL(@USER_INPUT, '') = '' AND 1=1))

 

728x90