请问这条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 ..
------解决思路----------------------
------解决思路----------------------
不能这样写的,建议楼主动态拼接sql 语句
------解决思路----------------------
------解决思路----------------------
学号 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
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 ..
------解决思路----------------------
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