2011-09-05 3 views
1

나는 테이블 값이 @place가 null 어떤 경우문이 그 진술에 대한 변수가 null의 경우 건너 뛰기는

TABLE1 
ID Name Country 
1 Anna Singapore 
2 Brad UK 
3 Cassie US 

declare @place varchar(20); 
set @place='US'; 

select * from Table1 where [email protected]; 

있을 것이다 ???

다음, 선택은

내가 원하는 것은 어떤 국가의 경우 문이로 처리하지 않는 것입니다 .. 아무 것도 선택하지 않습니다. 반면에 다른 진술이 있다면, 그들은 일할 것입니다.

어떻게 할 생각입니까 ??

답변

3

실제 상황은 더 복잡 경우 귀하의 질문에이 간단한 경우는 단지 당신이 recompile 힌트를 필요에 대한

select * 
from Table1 
where @place is null or [email protected] 
option (recompile) 

이유를 사용할 수

IF (@place IS NULL) 
    SELECT * 
    FROM table1 
ELSE 
    SELECT * 
    FROM table1 
    WHERE country = @place 

을 사용하는 경우는 하나를 피하기 위해입니다 명시 적 값을 제공 할 경우 두 경우에 대한 음식 제공 및 불필요한 검색을 계획하십시오.

이, 이러한 동적으로 쿼리를 생성하는 등의 다른 대안은 텍스트를 처리하기 때문에 Dynamic Search Conditions in T-SQL

+0

오. 변수를 조절하는 것이 유일한 방법입니까 ?? coz .. 나는 if 조건문에 coz를 추가하고 싶습니다. 아래의 코드는 다른 문장을 추가하기에는 너무 복잡합니다. 다른 방법은 없을까요? – william

+0

답안에 'If'조건문이 없습니다. –

+0

나는 링크에서 .. u를 제공했다. 링크 안에는 2 개의 버전이있다. 이전 버전은 if 문으로 검사합니다. 새것은 '%'.. – william

1

like=가 현재 상황에서 동일 기사 (CHAR, NCHAR, VARCHAR, NVARCHAR에 자세히 설명되어) 값. 변수 세트가 시도 대신

set @place='US' 

의 시도를 들어

대신

WHERE country = @place 

WHERE country like @place 

을 시도

set @country = isnull('''US''','''%''') 

이를 테스트하려면 : 예를 들어 당신이 명시 적 값을 사용하고 있기 때문에

declare @country nvarchar(50) 
set @country = isnull('''US''','''%''') 
print @Country 
set @country = isnull(NULL,'''%''') 
print @Country 

여분의 따옴표가 필요합니다 - '는 이스케이프 문자이며, 당신이 그것을 의미하는 각각의 값 주위에 따옴표를 필요로 테이블이 아닙니다 기둥. COLUMN_NAME을 (를) 사용하는 경우 단순히 % 문자 주변에 작은 따옴표를 사용하십시오.

SQL 버전에 따라 다른 와일드 카드 문자를 사용해야 할 수도 있습니다. 열린 변수와 관련된 위험이 있지만 상당히 직접적이고 선형적인 솔루션입니다.

관련 문제