可以用存储过程做:
首先建立一个临时表,只有一个字段,用于保存拆分之后的字符串。
字符串的拆分:用charindex()函数,查找‘,’然后用left()提取。insert into 插入临时表。
然后用游标结合charindex()函数查找是否在@str中出现。

解决方案 »

  1.   

    declare
      @s1 varchar(30),@s2 varchar(30),@s3 varchar930),
      @i int,@j int
    select @i=charindex(',',@str1)
    select @s1=left(@str1,@i-1)其它的自己弄吧。
      

  2.   

    那查询第二部分的时候,charindex()怎么写呢?
      

  3.   

    如果使用vb那么拆分字符串然后用数组是最简单的,但是sql里边怎么用啊?
      

  4.   

    第一次查的是',',第二次查的当然是分解后的字符串了。
    其实原理和vb中写带码是一样的,只不过sql server中不支持数组,所以用临时表。
    游表的作用就相当于带码中的循环。
      

  5.   

    declare @str varchar(500)set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'create table 你的表 (classid varchar(100))
    insert 你的表 values('aada,bbbf,ccc')
    insert 你的表 values('ddd,aaaaaa,fdsa')
    insert 你的表 values('vvvvvv,aaabbbb')create table #临时表(a varchar(100))
    declare @aaa varchar(8000)
    set @aaa='insert #临时表 select * from (select '''+replace(@str,',','''as str union all select ''')+''') a' 
    exec(@aaa)select * from 你的表 where exists (select 1 from #临时表 where ','+你的表.classid+',' like '%,'+a+',%')
    godrop table 你的表,#临时表
      

  6.   

    create table #t(
    id varchar(10))
    declare @str varchar(300)
    set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'
    declare @i int
    declare @len int
    set @i = 1
    set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'+','
    while @i < len(@str)
    begin
      insert #t select substring(@str,@i,charindex(',',@str,@i)-@i)
      set @i = charindex(',',@str,@i)+1
    end
    select * from 数据表 A,#t B where charindex(B.id, A.classid) > 0
      

  7.   

    create table t (classid varchar(100))
    insert t values('aada,bbbf,ccc')
    insert t values('ddd,aaaaaa,fdsa')
    insert t values('vvvvvv,aaabbbb')
    declare @str varchar(500)set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'select top 500 identity(int,1,1) as id into #t from sysobjects select distinct A.* from t A,
    ( select substring(','+string+',',id+1,charindex(',',','+string+',',id+1)-id-1) as string 
      from (select @str as string) B,#t c 
      where substring(','+string+',',id,8000) like ',_%') D
    where charindex(','+string+',',','+classid+',')>0drop table #t把#t建成固定表,更快。
      

  8.   

    declare @str varchar(500)set @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'select top 500 identity(int,1,1) as id into #t from sysobjects 改一下,用exists
    select A.* from t A where exists 
    (select 1 from
       ( select substring(','+string+',',id+1,charindex(',',','+string+',',id+1)-id-1) as string 
          from (select @str as string) B,#t c 
          where substring(','+string+',',id,8000) like ',_%') D
     where charindex(','+string+',',','+classid+',')>0 )drop table #t