: 여기때 @parm = -1 IN, 다른 반환 @parm 값을 반환
내 잘못된 구문 :
WHERE
(@StatusId = - 1 then Status.StatusId IN (1, 2, 3, 4))
else
Status.StatusId = @StatusId)
: 여기때 @parm = -1 IN, 다른 반환 @parm 값을 반환
내 잘못된 구문 :
WHERE
(@StatusId = - 1 then Status.StatusId IN (1, 2, 3, 4))
else
Status.StatusId = @StatusId)
을 부울 논리를 사용해야합니다. 이것을 시도하십시오 :
WHERE
((@StatusId = - 1 AND Status.StatusId IN (1, 2, 3, 4)) OR Status.StatusId = @StatusId)
전체 문장은 괄호 안에 있습니다.
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과 같지 않은 경우에만 동등 확인이 수행되어야한다고 가정합니다. 그렇지 않은 경우 두 번째 절에서 해당 부분을 제거 할 수 있습니다.
이렇게 할 수는 있지만 이런 식으로 쿼리 성능 문제가 발생할 수 있습니다 (매개 변수 스니핑 검색). @StatusID
의 값에 따라 올바른 SQL을 동적으로 생성하고 필요한 비트 만 실행하는 것이 더 좋습니다.
Where (
@StatusID = -1 And
Status.StatusID In (1, 2, 3, 4)
) Or (
@StatusID != -1 And
Status.StatusID = @StatusID
)