提问



我试图insert将某些文本数据放入SQL Server 9中的表中。


该文本包括单引号()。


我怎么逃避呢?


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


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

最佳参考


单引号通过将它们加倍来转义,就像您在示例中向我们展示的那样。以下SQL说明了此功能。我在SQL Server 2008上测试了它:


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.

其它参考1


如果使用另一个单引号转义单引号并不适合你(就像我最近的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

其它参考2


怎么样:


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

其它参考3


引用的加倍应该是有效的,所以它并不特别适用于你;但是,另一种方法是在字符串周围使用双引号字符而不是单引号字符。即,


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

其它参考4


另外要注意的是它是否真的存储为经典的ASCII(ASCII 27)或Unicode 2019(看起来相似但不相同)。

这不是什么大不了的事在插入,但它可能意味着选择和更新世界。
如果它是unicode值,那么转义为WHERE子句中的(例如,blah =Workerss comp)将返回,就像你正在搜索的值不是如果in s Comp实际上是unicode值。

如果您的客户端应用程序支持自由键,以及基于复制和粘贴的输入,它可能在某些行中是Unicode,在其他行中可能是ASCII!


确认这一点的一种简单方法是通过某种开放式查询来恢复您要搜索的值,然后将其复制并粘贴到notepad ++或其他一些unicode支持编辑器中。

不同的外观在ascii值和unicode之间,对于眼睛应该是显而易见的,但是如果你倾向于肛门,它将在十六进制编辑器中显示为27(ascii)或92(unicode)。

其它参考5


解决此问题的两种方法:





'你可以简单地在字符串中加倍,例如
select 'I''m happpy' -- will get: I'm happy





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


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

其它参考6


这应该工作


DECLARE @singleQuote CHAR 
SET @singleQuote =  CHAR(39)

insert into my_table values('hi, my name'+ @singleQuote +'s tim.')

其它参考7


我同意Cory Larson。当我使用SQL  Server 2005时,我使用单引号来逃避单引号。这听起来很奇怪,但它对我有用。试试吧。[18]


参考:SQL  Server 2005转义引号[19]

其它参考8


string value = "Abhishek's";

value = Replace(value,"'","''");