본문 바로가기

IT/Database

IN 조건 정적쿼리 구현

프로시저 작성시 IN 조건을 사용하는 경우 동적쿼리로 생성하는 경우가 많았는데


KEY 값 여러개를 파라메터 하나에 실어서 정적쿼리로 구현하는 샘플을 찾아서 남겨본다.


먼저 구분자를 ',' 로 한다고 가정할 경우


프로그램에서 파라메터를 'KEY1,KEY2' 같이 문자열을 구분자로 이어서 보내


구분자를 기준으로 임시테이블에 담아서 해당 임시테이블을 가지고 조건절에 사용하면 된다


아래는 샘플 쿼리...

  
   

DECLARE @KEY_LIST VARCHAR(MAX);

    SET @KEY_LIST = 'KEY1,KEY2,KEY3';

-- KEY 값을 담을 임시테이블 생성
DECLARE @TEMP TABLE
(
	KEYVALUE VARCHAR(1000) NOT NULL
)
  
IF RIGHT(@KEY_LIST, 1) <> ','
BEGIN
	SET @KEY_LIST = @KEY_LIST + ','
END

DECLARE @I INT
    SET @I = CHARINDEX(',', @KEY_LIST)


WHILE @I > 0
BEGIN
	DECLARE @KEYVALUE VARCHAR(1000)
	SET @KEYVALUE = RTRIM(LTRIM(SUBSTRING(@KEY_LIST, 1, @I - 1)))

	INSERT
	INTO
	@TEMP
	VALUES 
	(@KEYVALUE)   

	SET @KEY_LIST = RTRIM(LTRIM(SUBSTRING(@KEY_LIST, @I + 1, LEN(@KEY_LIST) - @I)))
	SET @I = CHARINDEX(',', @KEY_LIST)
END

SELECT *
  FROM @TEMP
;