创建存储过程的问题!
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   
 肯定不会有问题的