日期:2014-05-18  浏览次数:20525 次

请教一个关于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)