2012-11-30 3 views

답변

0

을 부울 논리를 사용해야합니다. 이것을 시도하십시오 :

WHERE 
((@StatusId = - 1 AND Status.StatusId IN (1, 2, 3, 4)) OR Status.StatusId = @StatusId) 

전체 문장은 괄호 안에 있습니다.

1
WHERE 
(@StatusId = -1 AND Status.StatusID IN (1,2,3,4)) 
OR 
(@StatusId <> -1 AND Status.StatusID = @StatusId) 

@StatusId가 null 인 경우 @StatusId <> -1은 false를 반환합니다. @StatusId가 -1과 같지 않은 경우에만 동등 확인이 수행되어야한다고 가정합니다. 그렇지 않은 경우 두 번째 절에서 해당 부분을 제거 할 수 있습니다.

0

이렇게 할 수는 있지만 이런 식으로 쿼리 성능 문제가 발생할 수 있습니다 (매개 변수 스니핑 검색). @StatusID의 값에 따라 올바른 SQL을 동적으로 생성하고 필요한 비트 만 실행하는 것이 더 좋습니다.

Where (
    @StatusID = -1 And 
    Status.StatusID In (1, 2, 3, 4) 
) Or (
    @StatusID != -1 And 
    Status.StatusID = @StatusID 
)