请教一个关于case when的应用问题
用一个存储过程来解决查询问题,代码如下:
select * from a
where Id = @Id
AND (
Case @sFilterType
WHEN '所有 ' THEN @sFilter = ' '
OR UPPER(a.stdName) LIKE UPPER( '% ' + @sFilter + '% ')
OR UPPER(a.StdNumber) LIKE UPPER( '% ' + @sFilter + '% ')
OR UPPER(a.stdEName) LIKE UPPER( '% ' + @sFilter + '% ')
OR a.StdDescription LIKE '% ' + @sFilter + '% '
when '标准号 ' then @sFilter = ' '
OR UPPER(a.StdNumber) LIKE UPPER( '% ' + @sFilter + '% ')
when '标准名 ' then @sFilter = ' ' OR UPPER(a.stdName) LIKE UPPER( '% ' + @sFilter + '% ')
when '标准英文名 ' then @sFilter = ' ' OR UPPER(a.EName) LIKE UPPER( '% ' + @sFilter + '% ')
when '说明 ' then @sFilter = ' ' OR a.StdDescription LIKE '% ' + @sFilter + '% '
END
)
其中报 “WHEN '所有 ' THEN @sFilter = ' '”这一行的“=” 附近有语法错误
请高手指点。
在线等。
------解决方案--------------------then 后面是一个结果来的,不能是等式,不明白你需要的结果是什么,看你写的,应该要把then
后面的都用字符串包括起来,把它作为一个字符串
------解决方案--------------------declare @sql varchar(8000)
set @sFilter = Case @sFilterType
WHEN '所有 ' THEN UPPER(a.stdName) LIKE UPPER( '% ' + @sFilter + '% ')
OR UPPER(a.StdNumber) LIKE UPPER( '% ' + @sFilter + '% ')
OR UPPER(a.stdEName) LIKE UPPER( '% ' + @sFilter + '% ')
OR a.StdDescription LIKE '% ' + @sFilter + '% '
when '标准号 ' then UPPER(a.StdNumber) LIKE UPPER( '% ' + @sFilter + '% ')
when '标准名 ' then UPPER(a.stdName) LIKE UPPER( '% ' + @sFilter + '% ')
when '标准英文名 ' then UPPER(a.EName) LIKE UPPER( '% ' + @sFilter + '% ')
when '说明 ' then a.StdDescription LIKE '% ' + @sFilter + '% '
END
exec( 'select * from a
where Id = 'cast(@Id as varchar)+ '
AND ( '+ @sfilter)
------解决方案--------------------exec( 'select * from a
where Id = 'cast(@Id as varchar)+ '
AND ( '+ @sfilter+ ') ')
------解决方案----------------------try
declare @sql varchar(8000)