2011-09-24 6 views
2

CASE 문을 저장 프로 시저에서 사용하고 있습니다. 나는 ..저장 프로 시저의 Case 문에서 IF 조건을 확인하는 방법

create proc USP_new 
(
@searchtype varchar(30), 
@stateName char(2), 
    @keywords varchar(300), 
    @locations varchar(100), 
    @searchBy varchar(20), 
    @keywordOption varchar(5), 
    @jobType char(4), 
    @startDate varchar(20), 
    @endDate varchar(20), 
    @companyID int 

) 
as begin 
declare @mainQuery varchar(8000) 
SELECT @mainQuery = 'SELECT JobID, JobTitle, CompanyInfo, JobSummaryLong, ModifiedDate 
       FROM Jobs 
       WHERE IsActive = 1 ' 
    IF @startDate = '' BEGIN 
     SELECT @mainQuery = @mainQuery + 'And ModifiedDate >= ''' + @startDate + ' 00:00:00'' ' 
    END 
    SELECT @mainQuery = @mainQuery + 'And ModifiedDate <= ''' + @endDate + ' 23:59:59''' 
SELECT 
CASE @mainQuery 
WHEN 'state' THEN 'ONE' 
WHEN 'keyword' THEN 'Second' 
WHEN 'company' THEN 'Third' 
ELSE 'Other' 

END 

나는 키워드 및 키워드 조건 다음 고토는 null이 아닌 경우 등이 '키워드'에 대한 자세한 상태를 확인하려면처럼 사용하고

나는 WHEN 'keyword' AND (@keyword IS NULL) THEN ''처럼 사용할하지만 구문 오류를주고있다 .

IT는 ....이

감사를 확인하려면이 또는 다른 방법으로 같은 상태를 확인할 수 있습니다

답변

2

그것은 당신이 저장 프로 시저와 함께 달성하기 위해 시도하고있는 무슨 말 정말 어렵다, 그러나 나는 당신이 확실히 필요로하는 것보다 더 힘들게 만들고 있다고 생각합니다. 다음과 같이 단일 쿼리로 다시 작성할 수 있습니다.

SELECT 
    KeywordResult = CASE 
     WHEN @keywords = 'state' THEN 'ONE' 
     WHEN @keywords = 'keyword' THEN 'Second' 
     WHEN @keywords = 'company' THEN 'Third' 
     ELSE 'Other' END, 
    JobID, 
    JobTitle, 
    CompanyInfo, 
    JobSummaryLong, 
    ModifiedDate 
FROM 
    Jobs 
WHERE 
    IsActive = 1 
    AND (@StartDate <> '' AND ModifiedDate >= @StartDate) 
    AND ModifiedDate <= @endDate + ' 23:59:59'''