2014-10-06 2 views
0

테이블에서 데이터를 가져 오는 데 사용되는 SQL Server 2008의 저장 프로 시저가 있습니다.SQL Server : Where 절의 두 가지 사례를 처리하는 방법

내 입력 매개 변수 는 다음과 같습니다

@category nvarchar(50) = '', @departmentID int 

내 절은 다음과 같습니다

WHERE  A.departmentID = @departmentID 
AND   A.category = @category 

내가이 경우에 Case 문 (또는 비슷한 것)을 적용 할 수있는 방법이 있나요 @category가 ''가 아니고 인 경우 범주 일치 만 확인해야한다고 가정하려면 모든 범주를 선택하십시오.?

여기서 제가 생각할 수있는 유일한 것은 다음을 사용하는 것입니다. 기술적으로는 작동하지만 여기서는 정확한 카테고리 일치를 확인할 수 없습니다.

WHERE  A.departmentID = @departmentID 
AND   A.category LIKE '%'[email protected]+'%' 

감사합니다. Tim.

답변

2

당신은 다음과 같이 당신의 WHERE 절을 수정할 수 있습니다 : 우리는 NULL를 지정하면, 오른쪽은 OR 조건 의지가 true를 돌려 여기이

if(LTRIM(RTRIM(@category))='') --if string is empty then set it to NULL 
set @category=NULL 

select * from tbl_name A 
WHERE  A.departmentID = @departmentID 
AND   A.category = @category 
(AND   A.category LIKE '%'[email protected]+'%' OR @category IS NULL) 

같은 시도

WHERE A.departmentID = @departmentID 
    AND (@category = '' or A.category = @category) 
+0

이것은 완벽합니다. 정확히 내가 찾고있는 것입니다. 고마워요 - 최대한 빨리 받아 들일 것입니다! :) – user2571510

2
WHERE A.departmentID = @departmentID 
    AND ((@category = '') or (@category <> '' AND A.category = @category)) 

이 당신이 결과 집합으로 원하는 무엇을 제공해야합니다, 그것은 기본적으로 다음 부서 ID 또는 매개 변수에 지정된 단지 범주에 대한 모든 결과를 반환해야 빈 범주 중 하나에 대한 확인을하고.

+0

고마워요! 그냥 범주에 db에서 비워 둘 수 없기 때문에 다른 대답은 내 경우에는 충분하다는 것을 보았습니다. – user2571510

0

을 은 따라서 그것은 올바른 결과를 얻을 수 @category NULL OR '' (공백)을 지정하는 경우

+0

왜 downvotes ?? please please –

+0

그건 내가 아니야. – user2571510

+0

@ialarmedalien 업데이트 답변 –

0

f에서 패스하면 null 값을 고려하십시오. 끝점

WHERE A.departmentID = @departmentID 
    AND ((isnull(@category,'') = '' or A.category = @category)