2013-01-04 4 views
0

임의의 소스에서 인수를 가져 왔으며 SQL 쿼리에서 where 절로 이동해야하는 1,2 개의 인수가있을 수 있습니다.설정된 수의 열을 가진 동적 where 절

어떻게이 쿼리를 작성하면 어떤 args가 전달 되더라도 쿼리는 가능한 한 많은 args로 실행됩니다. 나는 생각했다 :

Passed in: x=1,y=null,z=5 

//Do some simple checks and assign local variables when the value are not null. 

if(arg == null) 
{ 
arg = (/*some wild card that allows any value to be returned*/) 
} 
else{ 
arg = arg 
} 

생성 된 조항 :이 예제에서 Y에 사용할 수있는 무엇

그래서 난 문자열을 생성하는 동적으로 피할 수 = localz WHERE X = 한 localX 및 Y = (값) AND Z args의 가변 양과 함께? 나는이 문제를 분명히하기 위해 힘든 시간을 보냈다.

답변

4

SQL Server를 사용합니다. ISNULL 명령을 사용하고 제공되지 않을 때 들어오는 모든 매개 변수를 null로 만드십시오.

SELECT * 
FROM Table 
WHERE ISNULL(@Param1,Field1)=Field1 
AND ISNULL(@Param2,Field2)=Field2 
AND ISNULL(@Param3,Field3)=Field3 
AND ISNULL(@Param4,Field4)=Field4 
AND ISNULL(@Param5,Field5)=Field5 
+0

이것은 내가 필요한만큼 정확하게 작동했습니다. 고마워요 사양! – kevp

3

더 나은 솔루션, 모든 필드는 NULL 값을 가질 수있는 경우는 다음과 같습니다

SELECT * 
FROM Table 
WHERE (@Param1 is null or @Param1 = Field1) and 
     (@Param2 is null or @Param2 = Field2) and 
     (@Param3 is null or @Param3 = Field3) and 
     (@Param4 is null or @Param4 = Field4) and 
     (@Param5 is null or @Param5 = Field5) 

이와 isnull를 사용하는 솔루션의 주요 차이점은이 버전이 필드에 NULL 값을 처리하는 것입니다 . @ param1이 NULL이고 field1이 NULL이면 isnull(@param1, field1) = field1이라는 표현식은 false를 반환합니다. @Param1 is null or @Param1 = Field1 표현식은 모두 NULL 일 때 true를 리턴합니다.