我正在尝试使用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 + '%' )
我遇到的问题是,如果用户没有在姓氏字段中输入任何值,那么即使有有效数据,该语句也不会返回任何数据。
请不要对此提供任何帮助。
答案 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 + '%' )