2014-04-08 2 views
0

4 개의 매개 변수가있는 검색어가 있습니다. 사용자는 하나의 매개 변수 또는 둘 이상의 매개 변수의 값을 제공 할 수 있습니다. 사용자가 FIRSTNAME = "샘"과 성 = "폴"제공하는 경우이 경우여러 개의 null 매개 변수가있는 쿼리가 올바른 결과를 반환하지 않습니다.

Select * from person where 
(@FirstName is null or FirstName = @FirstName) Or ((@LastName is null or LastName = @LastName) 
or 
(@ssn is null or ssn = @ssn) Or ((@DateofBirth is null or DateofBirth = @DateofBirth) 

- 4 매개 변수는 내가 사용하고

FirstName, LastName, ssn, DateofBirth 

이다. 나는 모든 기록을 얻는다. 조건을 만족하는 행만 제외하고 있습니다. FIRSTNAME = "길"= "샘"성, 이름 = "마이크"성처럼 = "바울은"

+0

: 당신이 조건 사이 Or을 유지하려면, 다음을 시도 나는 당신이 OR보다는 모든 매개 변수에 대해 AND와 함께 가야한다고 생각합니다. – Karthikeyan

+0

은 여분의 여는 괄호로 오타가 있습니까? –

답변

2

당신은 당신의 조건 사이 And 대신 Or 필요합니다 어떤 파라미터가 null의

Select * from person where 
(@FirstName is null or FirstName = @FirstName) And (@LastName is null or LastName = @LastName) 
And 
(@ssn is null or ssn = @ssn) And (@DateofBirth is null or DateofBirth = @DateofBirth) 

그렇지 않으면 때마다 모든 조건의 전체 Or 체인이 true로 평가됩니다.


업데이트 :

Select * from person where 
(@FirstName is not null And FirstName = @FirstName) Or (@LastName is not null And LastName = @LastName) 
Or 
(@ssn is not null And ssn = @ssn) Or (@DateofBirth is not null And DateofBirth = @DateofBirth) 

(. is not nullAndis null로 변경 내부 조건)

+0

그러나 AND는 FirstName = "Sam"AND LastName = "Paul"에 대한 결과를 반환합니다. firstname이 "Sam"이 될 수 있고 성이있는 모든 레코드가 필요하다면 성은 이름이 "paul"이 될 수 있습니다. – Reena

+0

고마워 .... 그 작품 – Reena

+0

+1하지만 두 번째 쿼리에서 모든 is not null 검사가 중복됩니다. –

관련 문제