如何在SQL Server中转义单引号?

我试图插入一些文本数据到SQL Server 9的表中。

文本包括一个单引号。

我如何逃避?

我试过使用两个单引号,但它给我一些错误。

例如。 insert into my_table values('hi, my name''s tim.');

单引号可以通过加倍来逃脱 ,就像你在示例中给出的那样。 以下SQL说明了这一function。 我在SQL Server 2008上testing过它:

 DECLARE @my_table TABLE ( [value] VARCHAR(200) ) INSERT INTO @my_table VALUES ('hi, my name''s tim.') SELECT * FROM @my_table 

结果

 value ================== hi, my name's tim. 

如果使用另一个单引号转义您的单引号并不适用于您(例如,它不适用于我最近的REPLACE()查询),则可以在查询之前使用SET QUOTED_IDENTIFIER OFF ,然后在查询之后使用SET QUOTED_IDENTIFIER ON

例如

 SET QUOTED_IDENTIFIER OFF; UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S"); SET QUOTED_IDENTIFIER ON; -- set OFF then ON again 

怎么样:

 insert into my_table values('hi, my name'+char(39)+'s tim.') 

这个引用的翻倍应该是有效的,所以这是奇怪的,它不适合你。 但是,另一种方法是在string周围使用双引号而不是单引号字符。 也就是说,

insert into my_table values("hi, my name's tim." );

还有一点需要注意的是它是否真的存储为经典的ASCII码(ASCII 27)或Unicode 2019(看起来相似,但不一样)。

这对插入不是什么大不了的事情,但是它可能意味着select和更新的世界。
如果是unicode的值,那么如果“in”工人的Comp“实际上是”in“,那么在WHERE子句中转义(例如,blah ='Workers's Comp')将返回,就像您search的值不存在unicode值。

如果您的客户端应用程序支持免费密钥以及基于复制和粘贴的input,则可能在某些行中为Unicode,而在其他行中则为ASCII!

一个简单的方法来确认这是通过做某种开放式的查询,将带回你正在寻找的价值,然后复制并粘贴到记事本++或其他一些支持Unicode的编辑器。

ascii值和unicode之间的不同外观应该是明显的,但是如果你倾向于肛门,它将在hex编辑器中显示为27(ascii)或92(unicode)。

这应该工作

 DECLARE @singleQuote CHAR SET @singleQuote = CHAR(39) insert into my_table values('hi, my name'+ @singleQuote +'s tim.') 

解决这个问题的两种方法:


因为'你可以简单地在string中加倍,例如select 'I''m happpy' -- will get: I'm happy


对于你不确定的任何字符:在sql server中,你可以通过select unicode(':')来获得任何字符的unicode

所以这种情况下你也可以select 'I'+nchar(39)+'m happpy'

我同意Cory Larson。 当我使用SQL Server 2005时,我使用单引号来转义单引号。 这听起来很奇怪,但对我来说却很有用。 试试这个。

参考: SQL Server 2005转义引号

 string value = "Abhishek's"; value = Replace(value,"'","''");