2010-05-11 2 views
0

나는 쿼리 또는 매개 변수 예문과 매개 변수를 사용하여 두 열 사이를 어떻게 검색합니까? SQL 서버

Declare @SelectAll as integer 
Set @SelectAll = 1 
Declare @Column as integer 

Select mt.Column1, mtColumn2 
From MyTable as mt 
Where Case When @SelectAll = 1 Then 
      mt.Column1 IN(@Column) and mt.Column2 (' Selecting all") 
      When @SelectAll = 1 Then 
      mt.Column2 IN(@Column) and mt.Column1 (' Selecting all") 
      End 

이 쿼리의 목적은 사용자가 자신이 선택한 열 사이를 검색 할 수 있도록하는 것입니다에 변수에 따라 테이블로의 열을 사이에 검색하고자하는 . 더 많은 매개 변수의 사용은보고 서비스 보고서를 작성하기위한 것입니다.

+0

이전 질문에 만족스럽게 답변 되었습니까? 그렇다면 당신은 그들에게 돌아가 받아 들여지는 대답을 표시해야합니다! –

답변

0

몇 개의 열이 있습니까? 많지 않다면 가능한 모든 조합을 저장 프로 시저에 하드 코딩하고 조건부 로직 테스트 IF (@Column = 1) 등으로 올바른 것을 선택하십시오. 유일한 대안은 동적 SQL을 사용하는 것입니다. 하나의 쿼리를 만들려고하면 모든 경우에 하나의 사례에 대한 실행 계획을 다시 사용하면 다른 경우에 성능 문제가 발생할 수 있습니다.

+0

내가 사용하고있는 회사 정책에 위배되므로 저장소 procs를 사용할 수 없습니다. 또한 하드 코딩을 사용하는 것은 항상 나쁜 생각입니다. –

+0

colunms 2의 수와 검색 할 값이 일정하지 않습니다. –

+0

이상한 회사 정책이 들립니다. 조건부 논리는 Reporting Services 보고서에도 똑같이 적용될 수 있지만 데이터베이스 리팩토링은이 모든 논리가 서로 다른 보고서에 산재되어있어 까다로울 수 있습니다. 나는 너의 마지막 요점에 동의하지 않는다. 발생하는 문제의 예를 보려면이 스레드를 참조하십시오. http://stackoverflow.com/questions/2788082/sql-server-query-performance/2788160#2788160 –

0

내가 가장 나에게 where 절

(@SelectAll = 1 AND mt.Column1 IN (@Column)) OR (@SelectAll = 2와 MT에서이 표현을 추가하여 에 맞는 솔루션을 발견했다 .Column2 IN (@Column)) OR (@SelectAll = 3)

관련 문제