2010-07-02 2 views
3

나는 intID, dateMain, intStatus의 3 개의 열이있는 tblProducts라는 테이블을 가지고 있습니다. 나는 BIT 매개 변수에 따라 행을 포함하려면이 추가 수있는 방법을 내가 알고 싶은 것은SQL 간단한 sproc - 필터

ALTER PROCEDURE [dbo].[spList_Report] 
    @id INT, 
    @startDate DATETIME = NULL, 
    @endDate DATETIME = NULL, 
    @includeStatus1 BIT, 
    @includeStatus2 BIT, 
    @includeStatus3 BIT, 
    @includeStatus4 BIT 

AS 
    SET NOCOUNT ON 

    SELECT * 
    FROM 
    tblProducts as products 
    WHERE 
    product.intID = @id 
    AND product.dateMain >= @startDate 
    AND product.dateMain <= @endDate 

:

내가 저장 프로 시저과 같이 있습니다. 따라서 includeStatus1 = 1 인 경우 status = 1이고 다른 상태에 대해 동일한 행을 표시 하시겠습니까?

EDIT :

경우 includeStatus2 = 1 (TRUE) 모든 행을 검색 여기서 상태 = 2

= 1 (TRUE) 모든 행 retireve includeStatus3 경우 여기서 상태 = 3

경우 includeStatus2 = 0 (false)를 다음 행을 검색 해달라고 어디 상태 = 2

등 사전에

감사합니다.

+1

매개 변수가 0으로 전달되면 0과 일치하는 매개 변수 만 포함해야하며 그렇지 않은 경우 모두 포함 하시겠습니까? –

+0

BIT가 참이면 status = 1 인 행을 검색하지 않을 수 있습니다. 질문 –

답변

4

이 시도 :

AND product.status1 = COALESCE(NULLIF(@includeStatus1, 0), product.status1) 

@ includeStatus1가 null의 경우는 0, 그것은 효과적으로 무시됩니다. 1이면 결과를 필터링합니다.

+0

+1을 업데이트합니다. 그러나'status1'이 널값을 허용한다면 조금 더 많은 코드가 필요합니다. – a1ex07

0

0은 유효한 상태가 아니므로이 코드를 WHERE 절에 추가하면 작동합니다. 0이 유효한 상태이면 0 대신 매개 변수에 NULL을 전달하거나 SELECT 앞에 0을 NULL로 변환하면 여전히 작동합니다.

and intStatus in (@includeStatus1*1, @includeStatus2*2, @includeStatus3*3, @includeStatus4*4)