从具有空值的搜索中查询数据库

时间:2009-01-16 11:39:18

标签: sql-server tsql

我在c#中使用asp .net web表单搜索,例如使用字段: - 名称 - 水果

我想写一个可以搜索名字或水果的sproc。如果我知道两者都有值,我会将两个参数传递给sproc并写入:

Select * from myTable where name =@name and fruit = @fruit

但有时候,名字或水果都可能是空的。没有单独搜索水果和名称。我怎么做到这一点?

如果可能的话,我宁愿不创建动态查询,但如果这是我如何写它的唯一方法呢?

4 个答案:

答案 0 :(得分:4)

您需要确保空字符串不作为参数而不是null传递,但以下内容应该有效。但我很确定,如果用户没有输入任何内容,那么表单值将为null。

 select * from myTable
 where (@name is null or name = @name) and (@fruit is null or fruit = @fruit)

答案 1 :(得分:1)

也许:

SELECT * FROM myTable WHERE name Like '%' + @name AND fruit LIKE '%' + @fruit

答案 2 :(得分:0)

select * from myTable 
where 
   (name = @name and fruit = @fruit)
   or (name = @name and @fruit is null)
   or (fruit = @fruit and @name = is null )

答案 3 :(得分:0)

select * from myTable where name = isnull(@name, name) and fruit = isnull(@fruit, fruit)

如果@name和@fruit都为null,则返回整个表。如果这是一个问题,最好向SP添加一些额外的逻辑。