2014-04-08 109 views
0

我有一個搜索查詢,其中有4個參數。用戶可能會提供一個參數或多個參數的值。 4個參數是多個空參數查詢不會返回正確的結果

FirstName, LastName, ssn, DateofBirth 
我使用

-

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) 

在這種情況下,如果用戶提供名字= 「山姆」 和姓氏= 「保羅」。我得到所有的記錄。我除了滿足條件的行外。就像名字=「山姆」姓氏=「吉爾」,名字=「邁克」姓氏=「保羅」

+0

我認爲你應該與每個參數,而不是OR。 – Karthikeyan

+0

是多餘的左括號嗎? –

回答

2

你需要你的條件之間And而不是Or

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) 

否則只要任何參數爲null ,將所有條件的整個鏈條評估爲真。


更新:如果你想保留的條件之間Or,然後嘗試以下方法:

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) 

(這裏改爲Andis nullis not null內部條件)

+0

但是AND會返回FirstName =「Sam」和LastName =「Paul」的結果。如果我需要所有記錄的名字可以是「Sam」,並且姓氏和方式相同,姓氏可以與任何名字「保羅」? – Reena

+0

感謝....工作 – Reena

+0

+1,但在第二個查詢中,所有'不是空'檢查是多餘的。 –