2014-11-10 1 views

답변

0

다음은 필터링에 선택적 매개 변수를 사용하는 샘플 proc입니다.

CREATE PROCEDURE USP_MyProc(@FilterParameter AS VARCHAR(100) = NULL) 

BEGIN 

SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum 
FROM dbo.NegativeFeedbackView nfv 

WHERE 
(@compNatureId IS NULL OR ISNULL(nfv.comp_nature_id,0)= @compNatureId) 

GROUP BY nfv.Company_id 

END 
1

사용 IF/ELSE :

예를 들어, 단일 쿼리로 상황을 결합하는 시도

IF @compNatureId IS NULL 
BEGIN 

    SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum 
    FROM dbo.NegativeFeedbackView nfv 
    WHERE ISNULL(nfv.comp_nature_id,0) = @compNatureId 
    GROUP BY nfv.Company_id 

END 
ELSE 
BEGIN 

    SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum 
    FROM dbo.NegativeFeedbackView nfv 
    GROUP BY nfv.Company_id 

END 

:

SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum 
FROM dbo.NegativeFeedbackView nfv 
WHERE ISNULL(nfv.comp_nature_id,0) = @compNatureId 
OR @compNatureId IS NULL 
GROUP BY nfv.Company_id 

는 차선의 계획을 얻을 가능성, 그리고 (있는 경우)는 comp_nature_id에 어떤 인덱스를 사용할 수 없습니다.

관련 문제