日期:2014-05-18  浏览次数:20399 次

求用一个存储过程实现多重查询
现在我有一张表其中包括若干列,我在查询中为用户提供多列的选择性查询,比如可以输入姓名,性别,年龄等   而且必须进行判断是否为这些供查询的文本域进行了值的输入.也就是说用户光输入姓名可以进行查询也可以输入姓名和性别进行查询同样也能3个一起查       这样灵活的存储过程应该怎么写呢?
      请高手提点解决方案     多谢多谢     我是用sqlserver2000

------解决方案--------------------
这为老兄你可把我折磨惨了,我想到凌晨3点。给你我的存储过程中的算法~~~
create proc spsel
@info varchar(100) --一个参数包含了所有可选信息的参数
as
declare @a varchar(20),@b varchar(20),@c varchar(20),@d varchar(20)
select @a=@info --将参数赋值给@a
if charindex( ', ',@a) <> 0 --判断参数中是否含有,分割符
begin
select @b=left(@a,charindex( ', ',@a)-1) --将第一个,前的字符串参数赋给@b
select @a=right(@a,len(@a)-len(@b)-1) --把@a字符串减去@b的字符串再赋给@a
end
if charindex( ', ',@a) <> 0 --判断参数中是否还含有,分割符
begin
select @c=left(@a,charindex( ', ',@a)-1) --同上,二次取值
select @a=right(@a,len(@a)-len(@c)-1) -- 同上
end
else
select @d=@a --最后剩下来的交给 @d
select * from info_table --查询表,根据刚才分割后得到的子参数@a,@b,@c
where name=@b or name=@c or name=@d and
sex=@b or sex=@c or sex=@d and
age=@b or age=@c or age=@d
go
--调用存储过程,如下所示~~~~
exec spsel '张三,男,20 '
exec spsel '张三,20 '
....
有空交流交流~~~~~~~谢谢
------解决方案--------------------
--頁面提供三個TextBox 分別為: txtName,txtSex,txtAge

--創建sp

create procedure dbo.usp_test
@name varchar(50)= ' ',
@Sex varchar(02)= ' ',
@Age int=999
AS
select * from T
where ([name]=@name or @name= ' ')
and ([Sex]=@Sex or @Sex= ' ')
and ([Age]=@Age or @Age=999)

GO