2013-09-04 5 views
2
내 저장 프로 시저가 매개 변수를 허용

WHERE A의 의해 복수의 열을 반환하고 그 중 하나는 내 CASE statement에 표시된 것처럼 등 IISAppPool, ScheduledTask, WindowsService, COM+, ServiceAccount 같은 다른 값의 몇 가지를 포함 할 수 있습니다 @SearchBy되는 이하.어떻게 절 CASE 문

값에 따라 값의 해당 열에서 값을 찾습니다.

sComponentType 관계없이 항상 @SearchBy이 무엇 IIS_APP_POOL, SCHED_TASK, WIN_SERVICE 또는 COM_PLUS 포함됩니다.

내 where 절에 어려움을 겪고 있습니다. CASE 문이 필요합니다.

다음은 정상적으로 작동합니다. 나는 이것이 가능하지 알고

WHERE 
    sDate BETWEEN @FromDate AND @ToDate 
    AND 
      CASE @SearchBy 
       WHEN 'IISAppPool' THEN sComponentName AND sComponentType = 'IIS_APP_POOL' 
       WHEN 'ScheduledTask' THEN sComponentName AND sComponentType = 'SCHED_TASK' 
       WHEN 'WindowsService' THEN sComponentName AND sComponentType = 'WIN_SERVICE' 
       WHEN 'COM+' THEN sComponentName AND sComponentType = 'COM_PLUS' 
       WHEN 'ServiceAccount' THEN sServiceAccount 
       WHEN 'Server' THEN sServerName 
       WHEN 'IMCCReference' THEN sIMCCReference 
       WHEN 'User' THEN sManager 
      END LIKE('%' + @SearchCriteria + '%') 

그래서 나는 내가 위에서 가지고 있지만 난 그냥 방법을 모르는 것 이외에 다음과 같은 시도 : 나는 무엇을 찾고

WHERE 
    sDate BETWEEN @FromDate AND @ToDate 
    AND 
      CASE @SearchBy 
       WHEN 'IISAppPool' THEN sComponentName 
       WHEN 'ScheduledTask' THEN sComponentName 
       WHEN 'WindowsService' THEN sComponentName 
       WHEN 'COM+' THEN sComponentName 
       WHEN 'ServiceAccount' THEN sServiceAccount 
       WHEN 'Server' THEN sServerName 
       WHEN 'IMCCReference' THEN sIMCCReference 
       WHEN 'User' THEN sManager 
      END LIKE('%' + @SearchCriteria + '%') 

같은 뭔가가

AND 
    sComponentType = 
      CASE @SearchBy 
       WHEN 'IISAppPool' THEN 'IIS_APP_POOL' 
       WHEN 'ScheduledTask' THEN 'SCHED_TASK' 
       WHEN 'WindowsService' THEN 'WIN_SERVICE' 
       WHEN 'COM+' THEN 'COM_PLUS' 
      END 

내가 감각을 만드는 중이라서 희망 : @SearchBy는 응용 프로그램 풀, 예약 된 작업, Windows 서비스 또는 COM + 구성 요소가 아닌 경우 코드를 작성합니다. sComponentType 가정

sComponentType = 
     CASE @SearchBy 
      WHEN 'IISAppPool' THEN 'IIS_APP_POOL' 
      WHEN 'ScheduledTask' THEN 'SCHED_TASK' 
      WHEN 'WindowsService' THEN 'WIN_SERVICE' 
      WHEN 'COM+' THEN 'COM_PLUS' 
      ELSE sComponentType 
     END 

답변

0

당신이 간단한 경우 문이 아닌 검색 case 문을 사용할 수 없습니다 null이 아닌지? 예 :

AND 
     CASE 
      WHEN @SearchBy = 'IISAppPool' AND sComponentType = 'IIS_APP_POOL' THEN sComponentName 
      WHEN @SearchBy = 'ScheduledTask' AND sComponentType = 'SCHED_TASK' THEN sComponentName 
      WHEN @SearchBy = 'WindowsService' AND sComponentType = 'WIN_SERVICE' THEN sComponentName 
      WHEN @SearchBy = 'COM+' AND sComponentType = 'COM_PLUS' THEN sComponentName 
      WHEN @SearchBy = 'ServiceAccount' THEN sServiceAccount 
      WHEN @SearchBy = 'Server' THEN sServerName 
      WHEN @SearchBy = 'IMCCReference' THEN sIMCCReference 
      WHEN @SearchBy = 'User' THEN sManager 
     END LIKE('%' + @SearchCriteria + '%') 
1

변경이

+0

감사합니다.이 코드도 잘 작동하지만 GarethD와 함께 갈 예정입니다. 코드가 적습니다. –