안녕하세요
지금 임시적으로 condition1, condition2, condition3이라는 조건이 있는데
sp로 condition1, condition2로 변수가 넘어왔을때에
condition1, condition2가 같이 검색되게 끔하고 싶습니다
물론 condition3이 넘어왔을 때에는 condition3만 검색이 되어야 합니다.
예를들어
declare @chk varchar(50)
if(@chk == 'condition1' or @chk == 'condition2')
set @chk = 'condition1' + ', condition2'
select * from table
where column in (@chk)
물론 이렇게 하면 실행은 안되지만
이런 개념으로 검색을 하고 싶은데
어떻게 해야 할지 모르겠습니다..
Comment 4
-
나는짱이야
2014.01.23 11:58
-
하하하하하
2014.01.23 13:29
그 값들을 관리하는 프로그램은 추후개발이라
지금은 임시적으로 화면에 보여줘야 되는데
경우의 수가 너무 많아서.... 동적쿼리로도 너무 길것 같아서 지금너무답답하네요..
답변감사드립니다..
-
항해자™
2014.01.23 21:36
동적 쿼리는 가급적 사용하지 않는 것이 좋습니다,,
이유는 검색해 보시면 잘 나올꺼구요,,
프로시저가 길어지는건 상황에 맞게 내부에서 호출하는 프로시저를 여러개 나누시게 좋겠네요,,, -
맨즈밤
2014.01.24 09:28
WHERE (@condition3<>'' AND condition3=@condition3) OR
(@condition3='' AND @condition1<>'' AND @condition2<>'' AND condition1=@condition1 AND condition2=@condition2) OR
.
.
,
이런식으로 하시면 가능할듯 합니다. 다만 프로시저내에서 OR을 많이쓰면 실행계획이 안좋게 생성될가능성이 높습니다.해당 쿼리가 매우 빈번하게 실행되는게 아니거나, 원체 실행시간이 좀 걸리는 작업이라면 OPTION(RECOMPILE)를 사용하면
실행계획이 엉뚱하게 생성되는걸 방지할수있습니다. 이 옵션은 실제 대입받은 변수까지도 실행계획에 참조하기 때문이지요. 단
SQL2008 SP3 이상일때 가능합니다.
매우 빈번하게 호출되어서 프로시저 리컴파일 비용도 줄이고자 할때는 프로시저를 조건에 따라 나누거나 한프로시저에서 UNION ALL 을
써서 쿼리를 분리시키면 됩니다.
동적 쿼리가 정답이지 않을까 조심스럽게 생각해봅니다.