create table os(aa varchar(50),bb varchar(50))
insert into os select 'a01','01,02' 
insert into os select 'a02','02,03,05' 
insert into os select 'b06','01,' 
insert into os select 'c09','02,03'
create proc dddd
@bb varchar(100)
as
    declare @sql varchar(8000)
    set @sql='charindex('','+replace(@bb,',',','','',''+bb+'','')>0 or charindex('',')+','','',''+bb+'','')>0'
    set @sql='select * from os where '+@sql
    exec(@sql)exec dddd  @bb='01,03,05'  

解决方案 »

  1.   

    create table os(aa varchar(50),bb varchar(50))
    insert into os select 'a01','01,02' 
    insert into os select 'a02','02,03,05' 
    insert into os select 'b06','01,' 
    insert into os select 'c09','02,03'
    create proc dddd
    @bb varchar(100)
    as
        declare @sql varchar(8000)
        set @sql='charindex('','+replace(@bb,',',','','',''+bb+'','')>0 or charindex('',')+','','',''+bb+'','')>0'
        set @sql='select * from os where '+@sql
        exec(@sql)exec dddd  @bb='01,03,05'  强
      

  2.   

    create table tb(aa varchar(10),bb varchar(10))
    insert into tb select 'a01','01,02' 
    insert into tb select 'a02','02,03,05' 
    insert into tb select 'b06','01' 
    insert into tb select 'c09','02,03' declare @s varchar(10),@sql varchar(8000)
    set @s='01,05'
    set @sql='select '+replace(@s,',',' as bb union all select ')
    exec('select distinct a.* from tb a,('+@sql+') b where charindex(ltrim(b.bb),a.bb)>0')aa bb
    a01 01,02
    a02 02,03,05
    b06 01
      

  3.   


    --函数比较困难,应该函数内不能执行动态SQL,还是用存储过程吧```create table os(aa varchar(50),bb varchar(50)) 
    insert into os select 'a01','01,02'  
    insert into os select 'a02','02,03,05'  
    insert into os select 'b06','01,'  
    insert into os select 'c09','02,03' 
    create proc dddd 
    @bb varchar(100) 
    as 
        declare @sql varchar(8000) 
        set @sql='charindex('','+replace(@bb,',',','','',''+bb+'','')> 0 or charindex('',')+','','',''+bb+'','')> 0' 
        set @sql='if exists(select 1 from os where '+@sql +') select 1 else select -1'
        exec(@sql) exec dddd  @bb='01,03,05'  --结果:返回1
    exec dddd  @bb='04,06'   --结果:返回-1
      

  4.   

    to pt1314917谢谢你了
    不过我不想要存储过程
    想要一个function因为这个查询结果是我另外查询的条件。