2013-01-03 2 views
0

이 기능을 사용하여 SQL 저장 프로 시저에 where 절을 작성하려고합니다.향상된 where 절

if (@userId=0) 
begin 
    SELECT * from tblUsers 
end 
else 
begin 
    SELECT * from tblUsers 
    WHERE userId= @userId 
end 

내가 저장 프로 시저에 id(example:123)를 보낼 때 나는 그것이 전체 데이터를 반환해야합니다 아이디로 "0"을 보낼 때, 나에게 특정 하나를 지참 하지만 다른 경우에는 사용하지 않는다. where 절을 향상시킬 수있는 무언가가 있어야합니다. 예를

SELECT * from tblUsers 
WHERE (userId= @userId OR @userId = 0) and @userId = 123... bla bla 

(또는 과정이 아닌)

어떤 도움

?

+0

두 번째 코드 스 니펫이 허용되지 않는 이유는 무엇입니까? – shahkalpesh

+0

두 번째 쿼리 ('및 @userId ...'비트 제외)는 원하는 것으로 보입니다. 그런데 일반적으로 자신의 센티널 값을 구성하는 것이 아니라 'NULL'을 사용하여 값이 없음을 나타내는 것이 좋습니다. 이것이 바로 그 이유입니다. –

답변

1

이 추가 조건을 피 .. .just @ useId = null 데이터가 없거나 이와 같이 할 수있는 경우

if (@userId=0) 
    select @userId = null 
SELECT * from tblUsers 
    WHERE userId= Isnull(@userId,userId) 
+0

감사합니다. 좋은 해결책. – Rapunzo

3

당신은 절 곳의 경우 조건을 사용할 수 있습니다

당신이 쉽게

SELECT * from tblUsers 
    WHERE userId= Isnull(@userId,userId) 

같이 할 수있는 것보다 @userid에 null을 전달하면 단지 제안에 대한

SELECT 
    * 
from 
    tblUsers 
WHERE 
    userId=(case when @userId=0 then userId else @userId end) 
+0

그것도 작동, 응답 주셔서 감사합니다. – Rapunzo