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)
不能保证语法正确,但思路是这样的
@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)
不能保证语法正确,但思路是这样的
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 王剛*/
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