2012-11-01 4 views
0

Where Where Clause.Query에서 SWITCH 문을 사용하고 있는데 왜 오류가 발생하는지 이해할 수 없습니다. 쿼리는 다음과 같습니다SQL의 Switch 문에 오류 발생

Select * from Customer 
WHERE ([email protected] OR @ISClose is NULL) 
AND  
(C.FirstName like '%'[email protected]+'%' or @ClientName is NULL)  
AND 
CASE @abc 
     WHEN 2 THEN [email protected] or @Total is NULL 
     WHEN 3 THEN I.RecurringCharge like 
           '%'+cast(@Total as varchar(50))+'%' 
        or @Total is NULL 
    END 

코드는 불완전하지만 컴파일하려고 할 때 문제 야는 오류 메시지가 아래 얻고 이해하기에 충분하다.

Incorrect syntax near '='. 

오류는 다음 행에 있습니다.

WHEN 2 THEN [email protected] or @Total is NULL 

제발 도와주세요.

미리 감사드립니다.

+1

T-SQL'CASE' 문은 오직 ** ** Hello와 같은 값을 ** 단지 ** ** 코드 블록 **이나 표현식을 반환하지 않을 수 있습니다 ** –

+0

그러나 이것은 내 requirment입니다. @abc를 기반으로 위와 같이 돌아갑니다. 어떻게 든 고칠 수 있나요, 아니면 해결책이없는가요? –

+0

나는 당신이 무엇을하려고하는지 이해하지 못한다. - WHERE 절의 중간에, 당신은 변수와 물건을 할당하려고 시도하고있다 ..... [Where If if Statement in Where 사용하는 방법의 –

답변

2

the documentation of the CASE sattement을 참조하십시오.

CASE <variable> WHEN <value> ... 대신 CASE WHEN <variable>=<value> ...을 사용해야합니다.

귀하의 경우, CASE을 전혀 사용하지 않는 것이 좋습니다. 이와 같은 조건을 다시 작성해보십시오.

적용 방법을 명확히하기 위해 들여 썼습니다. 나는 또한 일반적인 OR @Total is NULL 조건을 고려했다.

+0

이 패턴을 사용하기 전에 Gail Shaw의 [Catch All Queries] (http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/)를 읽으십시오. –

관련 문제