SQL多条件查询的优化

abindede 2009-12-09 05:25:42
想起以前做的项目中有个aspx的查询页面,其中有3个文本框可填写,当时在存储过程中是用了8次的if语句才解决的。
相应的,如果有4个文本框,那就要16个if语句可以解决。

那么如果碰到有10个文本框,不是要疯掉了。。。

因此我想问下有没有什么比较好的方法可以解决这种多条件查询问题。

谢谢大家了!
...全文
189 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
abindede 2009-12-09
  • 打赏
  • 举报
回复
呵呵,先下班了,明天结贴,我还想看看有没有其他方法,掌握越多越强大。:)
abindede 2009-12-09
  • 打赏
  • 举报
回复
恩,就像在cs文件中拼sql语句一样,不过这个拼写在存储过程里面,比较安全
dawugui 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 abindede 的回复:]
比如说:文本框1表示开始时间、文本框2表示结束时间
那么我想应该是
if(@txt1 <>'' and @txt2 <>'')

if(@txt1='' and @txt2 ='')

if(@txt1='' and @txt2 <>'')

if(@txt1 <>'' and @txt2 ='')
4种了,对吧?其他的还是有几个文本框就有几个if语句。
[/Quote]
我支持按条件组合SQL语句.这是常用方法.
abindede 2009-12-09
  • 打赏
  • 举报
回复
比如说:文本框1表示开始时间、文本框2表示结束时间
那么我想应该是
if(@txt1<>'' and @txt2 <>'')

if(@txt1='' and @txt2 ='')

if(@txt1='' and @txt2 <>'')

if(@txt1<>'' and @txt2 ='')
4种了,对吧?其他的还是有几个文本框就有几个if语句。
abindede 2009-12-09
  • 打赏
  • 举报
回复
嗯,看来大家的方法都差不多,不过都很有效。。。
我是深受排列组合的影响啊。。。

受教受教了~~~
dawugui 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 abindede 的回复:]
想起以前做的项目中有个aspx的查询页面,其中有3个文本框可填写,当时在存储过程中是用了8次的if语句才解决的。
相应的,如果有4个文本框,那就要16个if语句可以解决。

那么如果碰到有10个文本框,不是要疯掉了。。。

因此我想问下有没有什么比较好的方法可以解决这种多条件查询问题。

谢谢大家了!
[/Quote]
用语句组合SQL.
例如:
if ... then
set @sql = @sql + '....'
if ... then
set @sql = @sql + '....'
if ... then
set @sql = @sql + '....'
if ... then
set @sql = @sql + '....'
四个文本框四次即可.
不过如果碰到四个都没有,不需要加条件即可.
rucypli 2009-12-09
  • 打赏
  • 举报
回复
if @a is not null
set @sql = @sql + @a
if @b is not null
set @sql = @sql + @b
.....


多少文本框多少if
gaomiqzhi 2009-12-09
  • 打赏
  • 举报
回复

create procedure pro_name @par1 VARCHAR(N1), @par2 INT... @parN VARCHAR(N)
AS
BEGIN
DECLARE @S1 VARCHAR(4000)

--在将要执行的查询语句中,先加一个永真条件,这样:后面就可以接N多个参数了
SET @S1='SELECT * FROM TBName WHERE 1=1'
IF(ISNULL(@par1,'')<>'')
SET @S1=@S1+' AND col1 LIKE '''+@par1+'%'''
IF(ISNULL(@par2,0)<>0) --当然:定义的参数如果是整型的话,就用 0
SET @S1=@S1+' AND col2 ='''+@par2+''''

IF(...)
SET @S1=@S1+'...'
IF(ISNULL(@parN,'')<>'')
SET @S1=@S1+' AND colN = '''+@parN+''''

EXEC(@S1)

END


ChinaJiaBing 2009-12-09
  • 打赏
  • 举报
回复
case when ..

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧