2012-01-11 4 views
0
의 변수 번호를 검색 SQL 쿼리를 만들기 위해

가능한 중복 :
Conditional Check in Where clause가장 좋은 방법은 매개 변수

내가 테이블에서 데이터를 검색하기 위해 제공 할 수있는 몇 가지 매개 변수가 있습니다 :

- DateFrom 
- DateTo 
- Name 
- TypeId 

개선해야 할 코드가 하나 있습니다. 응용 프로그램 코드에서는이 모든 매개 변수를 가져 오는 함수가 있으며 IF 문을 사용하여 제공하는 매개 변수를 기반으로 다른 쿼리를 작성합니다.
이 작업을 수행하는 더 좋은 방법이 있습니까?
매개 변수가있는 쿼리를 하나만 만들고 매개 변수가없는 경우 쿼리를 무시하십시오. 당신의 매개 변수는 이름 @Begin, @end, @Name이 가정

select...where DateFrom = 'someDate' 
select...where DateFrom = 'someDate' and DateTo = 'someDate' 
select...where DateFrom = 'someDate' and DateTo = 'someDate' and Name = 'someName' 
etc. 
+0

중복 사본 중복 ... 문제에 대한 최고의 텍스트 읽기 : T-SQL의 동적 검색 조건, Erland Sommarskog : http://www.sommarskog.se/dyn- search.html –

답변

3

매우 간단한 방법을 시도해보십시오 :
그래서 나는이 할 필요가 없습니다 그리고

select... 
where 
    (@Begin IS NULL OR DateFrom = @Begin) 
and (@End is NULL OR DateTo = @End) 
and (@Name is NULL OR Name = @Name) 
... 

당신 경우 매개 변수 값을 NULL로 전달한 다음 쿼리에서 건너 뜁니다.

+0

올바른 해결책 : –

+1

OP가 SQL Server 2008을 사용하고 있으므로 정확한 SQL Server 하위 버전에 따라 'OPTION (RECOMPILE)'이 가장 많이 사용됩니다. http://www.sommarskog.se /dyn-search-2008.html#SPandCUs) 런타임시 로컬 변수를 분석하고 기본적으로 'OR'을 제거하고 인덱스가있는 경우이를 활용할 수 있습니다. –

+0

그게 쉬웠다 :) – mikebertiean

0

일반적인 util 클래스를 사용하여 제어합니다.

getSqlParams(String dateFrom)
getSqlParams(String dataFrom,DateTo)

등등. 어쩌면 당신을 도울 수 있습니다. 다른 매개 변수가 다른 차원을 의미하기 때문입니다.
사용하면 정말 추합니다. : (