CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

简单查询问题,期待高手再次出现 期待大力、邹建。。。 在线等待

楼主Anhowe(寒冰)2006-07-01 12:20:47 在 MS-SQL Server / 基础类 提问

我有一个存储过程,在其参数中参传查询条件,如下简单查询所示  
  use   northwind  
  declare   @str   nvarchar(100)--为参数中传过来的值  
  set   @str='be,con'--根据具体情况,可能包含更多的值,如'be,con,dai'等等,只有用户使用时才确定  
  select   *   from   categories   where   categoryname   like   ('%'+@str   +'%')  
  --但因为like中的值有多个且用','分隔开了,所以查询时根本查不到所想要的记录  
  --现急向多位大哥大姐求救,怎么样才能查到我想要的结果?  
  --谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!在线等  
  --如上条件为set   @str='be,con'时,应查出的值有Beverages   /   Condiments   /   Confections   即类似于  
  --select   *   from   categories   where   categoryname   like   '%be%'   or   categoryname   like   '%con%' 问题点数:100、回复次数:8Top

1 楼LouisXIV(夜游神)回复于 2006-07-01 12:25:50 得分 0

--try  
   
  use   northwind  
  declare   @str   nvarchar(100)--为参数中传过来的值  
  set   @str='be,con'--根据具体情况,可能包含更多的值,如'be,con,dai'等等,只有用户使用时才确定  
  select   *   from   categories   where   charindex(','+categoryname+',',','+@str   +',')>0Top

2 楼LouisXIV(夜游神)回复于 2006-07-01 12:26:40 得分 0

没看清楚-_-  
   
  上面的放弃Top

3 楼LouisXIV(夜游神)回复于 2006-07-01 12:40:02 得分 50

 
   
  --try  
   
  use   northwind  
  declare   @str   nvarchar(100)  
  set   @str='be,con'  
  declare   @sql   varchar(8000)  
  set   @sql=('select   *   from   categories   where   categoryname   like   '+'''%'+replace(@str,',','%''   or   categoryname   like   ''%')   +'%''')  
  exec   (@sql)  
  Top

4 楼Anhowe(寒冰)回复于 2006-07-01 12:40:17 得分 0

LouisXIV(夜游神)   大哥,还有什么好办法吗?因为我那个条件是不不确定值,内容不是某个列中的完整值,而是列中的部份值  
   
  不过很谢谢您这么快对我问题的关注Top

5 楼zjcxc(邹建)回复于 2006-07-01 12:43:11 得分 0

use   northwind  
  declare   @str   nvarchar(100)--为参数中传过来的值  
  set   @str='be,con'--根据具体情况,可能包含更多的值,如'be,con,dai'等等,只有用户使用时才确定  
  declare   @where   varchar(8000)  
  set   @where   =   'categoryname   like   ''%'   +   replace(@str,   ',',   '%''   and   categoryname   like   ''%')   +   '%'''  
  exec('  
  select   *   from   categories   where   '+@where)Top

6 楼zjcxc(邹建)回复于 2006-07-01 12:44:01 得分 40

use   northwind  
  declare   @str   nvarchar(100)--为参数中传过来的值  
  set   @str='be,con'--根据具体情况,可能包含更多的值,如'be,con,dai'等等,只有用户使用时才确定  
  declare   @where   varchar(8000)  
  set   @where   =   'categoryname   like   ''%'   +   replace(@str,   ',',   '%''   or   categoryname   like   ''%')   +   '%'''  
  exec('  
  select   *   from   categories   where   '+@where)  
  Top

7 楼playwarcraft(时间就像乳沟,挤挤还是有的)回复于 2006-07-01 12:50:44 得分 5

--先定义个function  
  Create   FUNCTION   SplitList  
  (@separator   char(1),   @List   varchar(8000))  
  RETURNS   @ReturnTable   TABLE(ListItem   varchar(1000)   COLLATE   Database_Default)  
  AS    
  BEGIN  
  DECLARE   @Index   int  
  DECLARE   @NewText   varchar(8000)    
  IF   @List   =   null  
  RETURN  
  SET   @Index   =   CHARINDEX(@separator,   @List)  
  WHILE   NOT(@Index   =   0)  
  BEGIN  
  SET   @NewText   =   RTRIM(LTRIM(LEFT(@List,   @Index   -   1)))  
  SET   @List   =   RIGHT(@List,   LEN(@List)   -   @Index)  
  INSERT   INTO   @ReturnTable(ListItem)   VALUES(@NewText)  
  SET   @Index   =   CHARINDEX(@separator,   @List)  
          END  
     
  INSERT   INTO   @ReturnTable(ListItem)   VALUES(RTRIM(LTRIM(@List)))  
                     
            RETURN  
  END  
   
  --在定义存储程序  
  create   table   #temp   (...)     --   与表categories结构一致    
  declare   @str   nvarchar(100),@Item   nvarchar(100)  
  set   @str='be,con'  
  declare   c1   cursor   scroll   for  
      select   listItem   from   SplitList(',',@str)   T  
  open   c1  
  fetch   first   from   c1   into   @Item  
  while   @@fetch_status=0  
    begin  
      insert   into   #temp  
            select   *   from   categories   where   categoryname   like   ('%'+@str   +'%')  
      fetch   next   from   c1   into   @Item  
    end  
    select   *   from   #temp  
  close   c1  
  deallocate   c1  
  Top

8 楼fcuandy(了此残生.)回复于 2006-07-01 13:02:14 得分 5

SELECT   categories.*   FROM   categories  
  INNER   JOIN   dbo.Split(@str,',')  
  ON   CAHRINDEX(tempColumn,categoryname)>0  
   
  split函數  
  CREATE   Function   Split(@Sql   varchar(8000),@Splits   varchar(100))  
  returns   @temp   Table   (tempColumn   varchar(100))  
  As  
  Begin  
  Declare   @i   Int  
  Set   @Sql   =   RTrim(LTrim(@Sql))  
  Set   @i   =   CharIndex(@Splits,@Sql)  
  While   @i   >=   1  
  Begin  
  Insert   @temp   Values(Left(@Sql,@i-1))  
  Set   @Sql   =   SubString(@Sql,@i+len(@Splits),Len(@Sql)-@i)  
  Set   @i   =   CharIndex(@Splits,@Sql)  
  End  
  If   @Sql   <>   ''  
  Insert   @temp   Values   (@Sql)  
  Return  
  EndTop

相关问题

关键词

得分解答快速导航

  • 帖主:Anhowe
  • LouisXIV
  • zjcxc
  • playwarcraft
  • fcuandy

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo