请问这条SQL写法错在哪里,正确的如何写

请教这条SQL写法错在哪里,正确的怎么写?

 declare @n1 as varchar(50)
 declare @n2 as varchar(50)
 declare @n3 as varchar(50)
select * from table where 
CASE  
when @n1<>''  then   学号 like '%'+@n1+'%' '
when @n2<>'' then   名字 like '%'+@n2+'%' '
when @n3<>'' then   性别=@n3
else  NULL
END 


------解决思路----------------------
你这个需要分成三个语句来写。而不能集中写在一个CASE WHEN ..
------解决思路----------------------
本帖最后由 DBA_Huangzj 于 2014-12-08 16:07:13 编辑
declare @n1 as varchar(50)=''
 declare @n2 as varchar(50)=''
 declare @n3 as varchar(50)=''
 declare @sql as varchar(2048)
 set @sql='
select * from table where '+
CASE  
when ''+@n1+'' <>''''  then '  学号 like ''%''+'+@n1+'+''%'''
--when '+@n2+'<>'' then   名字 like ''%''+'+@n2+'+''%'' 
--when '+@n3+'<>'' then   性别='+@n3+'
else  NULL
END 
print @sql
--exec (@sql)

/*
select * from table where   学号 like '%'++'%'

*/

------解决思路----------------------
不能这样写的,建议楼主动态拼接sql 语句

------解决思路----------------------

--或者这样

declare @n1 as varchar(50)
declare @n2 as varchar(50)
declare @n3 as varchar(50)

select * from table 
where  学号 like '%'+@n1+'%' OR  名字 like '%'+@n2+'%' OR  性别 LIKE '%'+@n3+'%'

------解决思路----------------------
学号 like CASE when @n1<>'' then '%'+@n1+'%' else '%' end 
and 名字 like case when @n2<>'' then '%'+@n2+'%' else '%' end
and 性别= case when @n3<>'' then @n3 else [性别] end