如何在sql中使用两个相似的参数进行搜索功能

时间:2013-07-24 14:58:40

标签: sql

我正在尝试使用sql和asp.net进行搜索功能。我创建了一个Gridview,它使用以下sqldatasource 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 + '%' ) 

我遇到的问题是,如果用户没有在姓氏字段中输入任何值,那么即使有有效数据,该语句也不会返回任何数据。

请不要对此提供任何帮助。

2 个答案:

答案 0 :(得分:1)

以下是执行可选参数的一种方法:

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

它只是忽略参数为NULL时的条件(或者您可以使用= '',具体取决于您如何表示没有输入参数的事实。)

答案 1 :(得分:0)

如果它是null,请尝试使用CASE语句将@LastName替换为下划线(下划线是单个字符通配符)。

所以就像这样......

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