创建存储过程的问题!
Cteate PROCEDURE [dbo].[SearchMatriculation]
@LSh varchar(50)= ' ',
@Niandu varchar(100)= ' ',
@SName varchar(100)= ' ',
@SClass varchar(100)= ' ',
@Subject varchar(100)= ' '
AS
BEGIN
Select * from dbo.Matriculation where 入学年度=@Niandu or 流水号 like '%@LSh% ' or 学生姓名 like '%@Sname% ' or 班级=@SClass or 专业=@Subject;
END
数据库是SQL Server 2005。上面是我建立存储过程的脚本。没有达到我的要求,所以请教一下,我的目的是:上面有5个参数,查询时,可能只给其中某些参数值,其他的参数不参与到查询中,还有就是上面我写like查询时,对吗?后面是 '%参数名% ' 这样对吗?为什么运行时,明明包含那个字符串的记录都查不出来?
------解决方案--------------------Select * from dbo.Matriculation where 入学年度=@Niandu or 流水号 like '% '+@LSh+ '% ' or 学生姓名 like '% '+@Sname+ '% ' or 班级=@SClass or 专业=@Subject;
------解决方案--------------------定义存储过程的时候,给传入参数一个默认值。调用的时候就可以不给了。例如:
create PROCEDURE sp_XXX
@SQL_FLAG char(01) ,
@arrive_zip_code varchar(06) = null,
...
like应该这样写:
Select * from dbo.Matriculation where 入学年度=@Niandu or 流水号 like '% ' + @LSh + '% ' or 学生姓名 like '% ' + @Sname + '% ' or 班级=@SClass or 专业=@Subject;
------解决方案--------------------其实上面的select 有问题,在这里不能使用or,不是说他有语法错误,而是查出来的数据应该不是我们想要的,因为已经使用like所以应该改成and
我已经把整个完整的建存储过程写好了,如下:
--判定原数据库中有无SearchMatriculation过程,有则先删除
if exists (select * from sysobjects where id = object_id( 'dbo.SearchMatriculation ') and type = 'P ')
drop procedure dbo.SearchMatriculation
GO
Create Procedure dbo.SearchMatriculation
@LSh varchar(50)= ' ',
@Niandu varchar(100)= ' ',
@SName varchar(100)= ' ',
@SClass varchar(100)= ' ',
@Subject varchar(100)= ' '
AS Begin
Select *
from dbo.Matriculation
where 入学年度=@Niandu
and 流水号 like '% '+@LSh+ '% '
and 学生姓名 like '% '+@Sname+ '% '
and 班级=@SClass
and 专业=@Subject
end
go
肯定不会有问题的