我的老问题
Table
ID,名字,型号
1 狗 黄色
2 猫
3 猪 mini
在在我想做个通过名字或者型号查物品的语句
2个textbox 参数分别 为@a,@b
select * from table where (名字='%'+@a+'%') AND (型号='%'+@b+'%')
问题出现了 查 “猫”时没结果,应为型号为空
问下怎么解决,可以把型号为空的也查出来,谢谢
博友给的答案
select * from table where (名字 like '%' + @a + '%') and ( (型号 like '%' + @b + '%') or (型号 is null) )
2008/12/23 18:49:59 回答者:Gray Zhang
但是新问题出现了,如果型号里面输入错误的信息,比如“黑色” 结果不是空,而是
2 猫
怎么做呢?大家继续帮忙
select * from table where (@a is null or 名字 like '%' + @a + '%') and (@b is null or 型号 like '%' + @b + '%')
当你不想查询型号或名字的时候,直接把相应的参数设置为null就可以了
PS:你上面的逻辑是不对的,如果你传入了 @b ,那么不管@b是什么,都不应该把猫取出来,因为猫的型号为null,而不是传入的@b,所以可以试下我上面采取的忽略参数的方法
=============================
修改过的答案:
你把两个的默认值改为空字符串,然后使用下面这个:
select * from table where (@a='' or 名字 like '%' + @a + '%') and (@b='' or 型号 like '%' + @b + '%')
=======================================
再修改,不知道是什么问题,默认值为空字符串的时候,程序不会向数据库发送请求,所以还按你的方式把默认值设置为%,然后把where后面改成:
(@a='%' or 名字 like '%' + @a + '%') and (@b='%' or 型号 like '%' + @b + '%')
select * from table where (名字 like '%' + @a + '%') and (((型号 is null) and ((@b is null) or (@b='') or (@b=null))) or (型号 like '%' + @b + '%')))
这个应该够了
PS:谢谢丁学提醒
1:首先说明你数据库的数据不够完整
2:你的Application构造sql有问题。
那个textbox输入了就 构造那条sql.
3:sql
Code