如何在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,"'","''");