create procedure sp_q
@input_value varchar(500)
as
declare @sql varchar(4000)
declare @str varchar(500)
declare @name varchar(100)
declare @i smallint
set @i=0
@sql='select * from tbale where '
@str=@input_value
do while @str<>''
begin
set @i=@i+1
if @i>1 
begin
@sql=@sql+' or '
end
set @name=left(@str,(patindex('%,%',@str)-1)
set @sql=@sql+' name like '''+@name +'''
set @str=substring(@str,(patindex('%,%',@str)+1,len(@str))
end
pring @sql
execute (@sql)
不能保证语法正确,但思路是这样的

解决方案 »

  1.   

    --建立測試用例
    create table Test(ID varchar(20),Name nvarchar(50))
    insert into Test
    select '1','王小明' union all
    select '2','李劍強' union all
    select '3','何威' union all
    select '4','王剛'--測試
    declare @iCount int
    ,@iPos int
    ,@vGetString nvarchar(100)
    ,@vString varchar(100)
    ,@cDivisionChar nvarchar(10)select @cDivisionChar=','
    ,@iPos=1
    ,@vGetString=''
    ,@vString =N'李劍強,王'if(right(rtrim(@vString),1)<>@cDivisionChar)
    begin
    set @vString=@vString+@cDivisionChar
    end
    set @iCount=len(@vString)-len(replace(@vString,@cDivisionChar,''))select top 0 *
    into #Test
    from Testwhile(@iCount>=@iPos)
    begin
    set @vGetString= left(@vString,charindex(@cDivisionChar,@vString)-1)
    print @vGetString
    --print left('李劍強,王',charindex(',','李劍強,王')-1) insert into  #Test
    select * 
    from Test 
    where len(name)<>len(replace(name,@vGetString,'')) set @vString=right(@vString,len(@vString)-charindex(@cDivisionChar,@vString))
    set @iPos=@iPos+1
    endselect * from #Testdrop table #Test--刪除測試用例
    drop table Test
    /*
    顯示結果
    ID Name
    2 李劍強
    1 王小明
    4 王剛*/
      

  2.   


    declare @sql varchar(8000),@s varchar(100)
    create table #tt(name varchar(10))
    select @s='李剑强,王'
    select @sql=''
    select @sql=@sql+' union select '''+replace(rtrim(ltrim(@s)),',',''' union select ''')+'''' 
    select @sql=stuff(@sql,1,6,'')
    select @sql=stuff(@sql,charindex('union',@sql)-1,0,' as name')
    exec ('insert into #tt'+@sql )
    declare @tb table(id int,name varchar(10))
    insert into @tb select 1,'王小明'
    union
    select 2,'李剑强'
    union
    select 3,'何威'
    union
    select 4,'王刚'select * from @tb a ,#tt where charindex(#tt.name,a.name)>0