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
'DataBase > MSSQL' 카테고리의 다른 글
[MSSQL] 가변 컬럼 예시(월별 합계) (0) | 2022.10.06 |
---|---|
[MSSQL] ISNULL로 Empty, Null 체크 예시 (0) | 2022.09.21 |
[MSSQL] 이중 커서/중첩 커서(Nested Cursor)로 반복처리 예시 (0) | 2022.09.04 |
[MSSQL] 특정문자 포함여부에 따라 다른 값 출력(IF, CASE) (0) | 2022.04.29 |
[MSSQL] 컬럼 합치기 STUFF + FOR XML PATH (0) | 2022.04.25 |