2013-07-24 29 views
2

我正在嘗試使用sql和asp.net執行搜索功能。我創建了一個Gridview,它使用以下sqldatasource sql語句來檢索數據。如何在sql中執行兩個類似參數的搜索功能

SELECT customer.fisrtname, 
     customer.lastname, 
     customer.initials, 
     customer.title, 
     address.street, 
     area.area, 
     suburb.suburbname 
FROM address 
     INNER JOIN area 
       ON address.areaid = area.areaid 
     INNER JOIN areasuburb 
       ON area.areaid = areasuburb.areaid 
     INNER JOIN customeraddress 
       ON address.addressid = customeraddress.addressid 
     INNER JOIN customer 
       ON customeraddress.customerid = customer.customerid 
     INNER JOIN suburb 
       ON areasuburb.suburbid = suburb.suburbid 
WHERE (customer.lastname LIKE '%' + @Lastname + '%') 
     OR (address.street LIKE '%' + @Street + '%') 

我遇到的問題是,如果用戶沒有輸入任何值到姓田的那麼語句不返回任何數據,即使有有效數據。

請任何幫助,這將不勝感激。

+0

你也可以允許的情況下'WHERE customer.lastname = 「」'。 –

+0

如果你使用postgresql,它有一些漂亮的搜索功能(作爲擴展)。 – Lucas

+0

你有沒有試過在你的參數上設置'DefaultValue'? – wlyles

回答

1

這裏是做可選參數的一種方法:

WHERE (@Lastname is NULL or customer.lastname LIKE '%' + @Lastname + '%') or 
     (@Street is NULL or address.street LIKE '%' + @Street + '%') 

它只是忽略條件時,該參數是NULL(或者你可能使用= '',這取決於你如何表示的事實,沒有參數爲輸入) 。

+0

你的答案比我的更優雅! – Jim

+0

感謝您的幫助 – Sheenie

0

嘗試使用CASE語句將下劃線替換爲@LastName(下劃線是單個字符通配符)(如果爲空)。

所以這會是這樣......

WHERE 
    (customer.lastname LIKE '%' + CASE WHEN (@LastName IS NULL) THEN '_' ELSE @Lastname END + '%') 
OR 
    (address.street LIKE '%' + @Street + '%') 
+0

感謝您的幫助我也試過這個,但其他答案適合我的問題更多 – Sheenie

相關問題