首页 新闻 会员 周边 捐助

新问题出现了

0
悬赏园豆:100 [已解决问题] 解决于 2008-12-25 09:52

我的老问题

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      猫   

怎么做呢?大家继续帮忙

真的很菜的主页 真的很菜 | 初学一级 | 园豆:20
提问于:2008-12-24 11:13
< >
分享
最佳答案
0

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 + '%')

丁学 | 专家六级 |园豆:18730 | 2008-12-24 12:44
其他回答(2)
0

select * from table where (名字 like '%' + @a + '%') and (((型号 is null) and ((@b is null) or (@b='') or (@b=null))) or (型号 like '%' + @b + '%')))

这个应该够了

PS:谢谢丁学提醒

GUO Xingwang | 园豆:3885 (老鸟四级) | 2008-12-24 12:13
0

1:首先说明你数据库的数据不够完整

2:你的Application构造sql有问题。

那个textbox输入了就 构造那条sql.

3:sql

 

Code
roboth | 园豆:28 (初学一级) | 2008-12-24 17:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册