2

我正在尝试使用 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 + '%' ) 

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

请对此提供任何帮助,我们将不胜感激。

4

2 回答 2

1

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

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

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

于 2013-07-24T15:06:14.260 回答
0

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

所以它会是这样的......

WHERE  
  ( customer.lastname LIKE '%' + CASE WHEN (@LastName IS NULL) THEN '_' ELSE @Lastname END + '%' )
OR
  ( address.street LIKE '%' + @Street + '%' ) 
于 2013-07-24T15:10:14.220 回答