프로시저 작성중입니다. 프로시저에서 @V_DIVISION이라는 변수와 @V_ILJA 라는 변수를 선언하고, @V_DIVISION 변수에
값이 1이 들어오면 @V_ILJA 변수에 A 테이블의 ILJA_A 컬럼명을 넣고, 값이 2가 들어오면 @V_ILJA 변수에 A 테이블의 ILJA_B 컬럼명을 넣으려고 합니다.
IF @V_DIVISION = '1'
BEGIN
SET @V_ILJA = 'A.ILJA_A'
END
ELSE IF @V_DIVISION = '2'
BEIGIN
SET @V_ILJA = 'A.ILJA_B'
END
SELECT *
FROM A
WHERE @V_ILJA BETWEEN '20140310' AND '20140313'
이런식으로 작성중입니다.
그런데, @V_DIVISION 변수에 값이 1이던 2이던, ILJA_A 컬럼만 조회되는 거 같습니다.. 값이 2가 들어와도 ILJA_B 컬럼으로 조회하지 않습니다. PRINT @V_ILJA 를 찍으면, 값이 1이면 ILJA_A를, 값이 2이면 ILJA_B를 출력하는데, 프로시저 실행결과는 ILJA_A만 조회됩니다.
원래 변수에 컬럼명을 집어 넣을 수 없나요?
다른 방법이 있다면 무슨 방법이 있을까요??
구분값에 따라, 변수에 각기 다른 컬럼명을 집어넣을 수 있으면 됩니다..
감사합니다..
Comment 4
-
항해자™
2014.03.13 15:24
IF @V_DIVISION = '1'BEGINSELECT *FROM dbo.tblAWHERE A.ILJA_A BETWEEN '20140310' AND '20140313'ENDELSE IF @V_DIVISION = '2'BEGINSELECT *FROM dbo.tblAWHERE A.ILJA_B BETWEEN '20140310' AND '20140313'END -
킹멋쟁
2014.03.13 15:25
우선 답변 감사합니다!!
현재 답변해주신 것처럼 쓰고 있는데, WHERE 조건에 구분값이 많아 지면, 구분값에 따라 쿼리를 전부다 작성해야 하는 불편함 때문에 그렇습니다..
동적쿼리 이용하는 것 외엔 방법이 없는건가요?? 컬럼명을 변수로 사용하는 게 애초에 불가능한 것인지..T^T
-
건우아빠
2014.03.13 17:07
where (case @V_DIVISION
when '1' then A.ILJA_A
when '2' then A.ILJA_B
end ) between '20140310' AND '20140313' 도 가능 . -
킹멋쟁
2014.03.24 14:17
댓글을 늦게 확인했습니다! 답변 감사합니다 많은 도움이 되었습니다 ^^!!