由双单引号表示的单引号不起作用

时间:2015-02-23 05:48:04

标签: sql sql-server tsql escaping

我有以下sql查询

set @st = @st + ' locationcity=''St. John''s'' order by datet desc'; execute(@st); 

我使用双引号,因为在查询中使用单引号的方式。

但我收到了以下错误

  

's'附近的语法不正确。

     

字符串'by datet desc'之后的未闭合引号。

如何解决此错误?

3 个答案:

答案 0 :(得分:1)

试试这个:

使用Print进行调试

Declare @st varchar(1000)='';
set @st=@st+' locationcity=''St. John''''s'' order by datet desc';
print @st
 execute(@st);

答案 1 :(得分:1)

您的结果查询是

 locationcity='St. John's' order by datet desc

你可以看到倒数第二个'在s之前被视为结束报价,因此会给你一个错误而下一个'作为开头报价而没有收盘报价,因此又会出现一个错误。 试试

''St. John''''s''

答案 2 :(得分:0)

试试这个。

 set @st = @set+' locationcity=''St. John''''s'' order by datet desc'
 execute(@st);

见这个例子。

 create table #tab (name varchar(50))
 insert into #tab values('hello1')
 declare @set as varchar(max)
 set @set='update #tab '
 set @set=@set+'set name=''john''''s''' --updating name with john's
  exec(@set)
 select * from #tab