首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一个关于case when的应用有关问题

2012-01-23 
请教一个关于case when的应用问题用一个存储过程来解决查询问题,代码如下:select*fromawhereId@IdAND(Cas

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


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

热点排行