我在c#中使用asp .net web表单搜索,例如使用字段: - 名称 - 水果
我想写一个可以搜索名字或水果的sproc。如果我知道两者都有值,我会将两个参数传递给sproc并写入:
Select * from myTable where name =@name and fruit = @fruit
但有时候,名字或水果都可能是空的。没有单独搜索水果和名称。我怎么做到这一点?
如果可能的话,我宁愿不创建动态查询,但如果这是我如何写它的唯一方法呢?
答案 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添加一些额外的逻辑。