以前写存储过程,输入参数和输出参数都确定,现在遇到一个问题,我要实现组合查询,那么输入的参数就会出现有多个参数,但是传
进存储过程的可能只有一部分有值,而且每次有值的参数又不能确定。
比如建一个学生信息表:
create table tb_stuInfo
(
stuId int identity(1,1) primary key,--序号
stuNum nchar(10) not null unique,--学号
stuName nvarchar(10) not null,--姓名
stuSex nchar(1) not null,--性别,1表示男,0表示女
stuAge int not null,--年龄
stuPhone nchar(11),--电话号码
stuEmail nvarchar(30)--电子邮件
)
现在要根据“学号”、“姓名”或者“性别”来查询学生信息,输入参数就有stuNum、stuName、stuSex,如果输入的参数都为空则表示
查询的所有学生的信息,否则查询的是有值的参数的学生信息。
要实现这样的要求的存储过程如下:
create procedure usp_GetStuInfo
@stuNum nchar(10)=null,
@stuName nvarchar(10)=null,
@stuSex nchar(1)=null
as
DECLARE @temp NVARCHAR(10) SET @temp='@#$%&*^()?'
select * from tb_stuInfo
where 1=1 and isnull(stuNum,@temp) like isnull('%'+@stuNum+'%',isnull(stuNum,@temp))
and isnull(stuName,@temp) like isnull('%'+@stuName+'%',isnull(stuName,@temp))
and isnull(stuSex,@temp) like isnull('%'+@stuSex+'%',isnull(stuSex,@temp))
(1)查询性别为“男”的学生信息:
exec usp_GetStuInfo null,null,'1'
(2)查询 学号=2007440972;性别为男的学生信息:
exec usp_GetStuInfo 2007440972,null,'1'