2014-03-19 3 views
0

SQL Server 2008 사용. 저장된 프로 시저에 '@State'라는 입력 매개 변수가 있습니다. 매개 변수는 기본적으로 '- 전체 -'일 수도 있고 필터링 할 상태를 포함 할 수도 있습니다.T-SQL : WHERE 절 - 입력 변수를 기반으로 조정하는 방법

그래서 '--All--'인 경우 @State를 where 절에 포함시키고 싶지 않습니다. 그렇지 않으면 제공된 @State를 기준으로 필터링하고 싶습니다. 그들이 통과한다면 기본적으로는 ...이에

SELECT * FROM MyTable 
WHERE Type='AAA' AND [email protected] 

결과 또는 수 '--All--'

SELECT * FROM MyTable 
WHERE Type='AAA' 

을 나는 저장된 프로 시저에서이 작업을 수행 할 수 있습니까?

답변

3
SELECT 
    * 
FROM 
    MyTable 
WHERE 
    Type='AAA' 
    AND Status = CASE @Status WHEN '--All--' THEN Status ELSE @Status END 
1

오타를 만들었다 고 생각했습니다. @Status가 아닌 @State 여야합니다. 이 간단한 쿼리는 요구 사항에 두 개의 SQL 문을 필요로하기 때문에 원하는 내용이 아닐 수도 있습니다.

SELECT * FROM MyTable 
WHERE Type='AAA' AND (@State='--All--' or [email protected]) 
0

또는 ...

당신은 더 간단보다 만들 수 :

SELECT * FROM MyTable 
WHERE Type='AAA' AND @State in ('--All--', State) 

절대적으로 필요하지 않는 (또는 경우, 저장 프로 시저에 그것을 할 필요가 없습니다 비즈니스/코딩 연습하려면 그렇게해야합니다).