日期:2014-05-18  浏览次数:20563 次

存储过程拼模糊查询字符串问题

declare @indextable table(id int identity(1,1),nid int)

set rowcount 1

declare @TureName varchar(50)

declare @RoleId varchar(2)

set @RoleId='1'

set @TureName='三'

declare @str1 varchar(500)

declare @str2 varchar(500)

declare @str3 varchar(500)

declare @str4 varchar(500)

declare @str5 varchar(5000)


set @str1='insert into @indextable(nid) select UserId from Users where 1=1'

if @TureName!=''

begin

set @str2= ' and TureName like "%'+@TureName+'%"'

end

if @RoleId!='0'

begin

set @str3=' and RoleId='+@RoleId

end

set @str4= ' order by CreateTime desc

select * from ProgramInfo O,@indextable t where O.Id=t.nid

and t.id between 1 and 1 order by t.id'


set @str5=@str1+@str2+@str3+@str4

print @str5[color=#FF6600][/color]

这是测试存储过程,结果为:

insert into @indextable(nid) select UserId from Users where 1=1 and TureName like "%三%" and RoleId=1 order by CreateTime desc
select * from ProgramInfo O,@indextable t where O.Id=t.nid
and t.id between 1 and 1 order by t.id

请问如何将"%三%" 变成单引号。很难搞懂存储过程里拼接sql语句的引号问题,多谢各位大侠帮忙!

------解决方案--------------------
SQL code

TureName like ''%'+@TureName+'%'''

------解决方案--------------------
SQL code

declare @indextable table(id int identity(1,1),nid int) set rowcount 1 
declare @TureName varchar(50) declare @RoleId varchar(2) set @RoleId='1' 
set @TureName='三' declare @str1 varchar(500) declare @str2 varchar(500) 
declare @str3 varchar(500) declare @str4 varchar(500) declare @str5 varchar(5000)
 set @str1='insert into @indextable(nid) select UserId from Users where 1=1' 
 if @TureName!='' begin set @str2= ' and TureName like ''%'+@TureName+'%'''
  end if @RoleId!='0' begin set @str3=' and RoleId='+@RoleId end 
  set @str4= ' order by CreateTime desc select * from ProgramInfo O,@indextable t where O.Id=t.nid and t.id between 1 and 1 order by t.id' 
  set @str5=@str1+@str2+@str3+@str4 print @str5

------解决方案--------------------
动态拼接的话需要转义字符....
'''表示一个'
------解决方案--------------------
SQL code
and TureName like "%'+@TureName+'%"'
--》and TureName like ''%'+@TureName+'%'''