SQLServer+储存过程+模糊查询+结果空值+字符拼接
大家好,我是EverdayForCode。你,今天学习了吗?
在做SQLServer实验时,有一个题目是这样的:
Q1:编写一个名为“
SelectSTUByNamePROC
”的存储过程,存储过程接收一个名为“@name
”的参数,存储过程的作用是根据“@name
”进行模糊查询,从学生表中查询姓名中含有“@name
”的学生信息。
Q2:执行存储过程“SelectSTUByNamePROC
”,查询名字中含有“家”的学生。
最开始代码是这样写的:
建立“SelectSTUByNamePROC”的存储过程
create procedure SelectSTUByNamePROC
@name char(20)
as
begin
select *
from student
where sname like '%'+@name+'%'
end
调用存储过程
exec SelectSTUByNamePROC '家'
执行结果
发现执行结果是空的。
原因:
@name char(20)
定义时@name
长度为char(20)
,当你执行存储过程,输入参数不足char(20
)时会自动向后填充空格,也就是说@name
的值不单单是一个
‘家’字符,所以匹配不到。
更改方法:
使用rtrim()
函数去掉@name
右边的空格字符
create procedure SelectSTUByNamePROC
@name char(20)
as
begin
select *
from student
where sname like '%'+rtrim(@name)+'%'
end
结果:
总结:
在建立存储过程设计到模糊查询时,使用rtrim()
函数去掉@name
右边的空格字符即可。