我正在尝试将 insert 一些文本数据放入 SQL Server 9中的表中 .
insert
SQL Server
该文本包括单引号(') .
我怎么逃避呢?
我尝试使用两个单引号,但它给我一些错误 .
例如 . insert into my_table values('hi, my name''s tim.');
insert into my_table values('hi, my name''s tim.');
Single quotes are escaped by doubling them up ,正如你在你的例子中向我们展示的那样 . 以下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.
string value = "Abhishek's"; value = Replace(value,"'","''");
我'm agree with Cory Larson. When I' m使用SQL Server 2005我使用单引号来逃避单引号 . 这听起来很奇怪,但它对我有用 . 试试吧 .
参考:SQL Server 2005 escaping quotes
另外要注意的是它是否真的存储为经典的ASCII'(ASCII 27)或Unicode 2019(看起来相似但不相同) .
这对于插入来说并不是一件大事,但它可能意味着选择和更新世界 .如果它在WHERE子句中的's the unicode value then escaping the '(例如,其中blah = 'Workers' 's Comp')将返回,就像您在"Worker's Comp"中搜索的值isn 't there if the '实际上是unicode值 .
如果您的客户端应用程序支持自由键,以及基于复制和粘贴的输入,则它可能在某些行中为Unicode,而在其他行中为ASCII!
确认这一点的一种简单方法是通过某种开放式查询来恢复您要搜索的值,然后将其复制并粘贴到记事本或其他一些支持unicode的编辑器中 .
ascii值和unicode之间的不同外观对于眼睛应该是显而易见的,但是如果你倾向于肛门,它将在十六进制编辑器中显示为27(ascii)或92(unicode) .
引用的加倍应该有效,所以它特别适用于你;但是,另一种方法是在字符串周围使用双引号字符而不是单引号字符 . 即,
insert into my_table values("hi, my name's tim." );
insert into my_table values("hi, my name's tim."
怎么样:
insert into my_table values('hi, my name'+char(39)+'s tim.')
如果用我最近的 REPLACE() 查询中的一个单引号转义单引号是't working for you (like it didn' t,则可以在查询之前使用 SET QUOTED_IDENTIFIER OFF ,然后在查询之后使用 SET QUOTED_IDENTIFIER ON .
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
这应该工作
DECLARE @singleQuote CHAR SET @singleQuote = CHAR(39) insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
2 ways to work around this:
对于 ' ,你可以简单地在字符串中加倍,例如 select 'I''m happpy' -- will get: I'm happy
'
select 'I''m happpy' -- will get: I'm happy
对于任何你不确定的字符:在sql server中你可以通过 select unicode(':') 得到任何char的unicode
select unicode(':')
所以这种情况你也可以 select 'I'+nchar(39)+'m happpy'
select 'I'+nchar(39)+'m happpy'
9 回答
Single quotes are escaped by doubling them up ,正如你在你的例子中向我们展示的那样 . 以下SQL说明了此功能 . 我在SQL Server 2008上测试过它:
结果
我'm agree with Cory Larson. When I' m使用SQL Server 2005我使用单引号来逃避单引号 . 这听起来很奇怪,但它对我有用 . 试试吧 .
参考:SQL Server 2005 escaping quotes
另外要注意的是它是否真的存储为经典的ASCII'(ASCII 27)或Unicode 2019(看起来相似但不相同) .
这对于插入来说并不是一件大事,但它可能意味着选择和更新世界 .
如果它在WHERE子句中的's the unicode value then escaping the '(例如,其中blah = 'Workers' 's Comp')将返回,就像您在"Worker's Comp"中搜索的值isn 't there if the '实际上是unicode值 .
如果您的客户端应用程序支持自由键,以及基于复制和粘贴的输入,则它可能在某些行中为Unicode,而在其他行中为ASCII!
确认这一点的一种简单方法是通过某种开放式查询来恢复您要搜索的值,然后将其复制并粘贴到记事本或其他一些支持unicode的编辑器中 .
ascii值和unicode之间的不同外观对于眼睛应该是显而易见的,但是如果你倾向于肛门,它将在十六进制编辑器中显示为27(ascii)或92(unicode) .
引用的加倍应该有效,所以它特别适用于你;但是,另一种方法是在字符串周围使用双引号字符而不是单引号字符 . 即,
insert into my_table values("hi, my name's tim."
);怎么样:
如果用我最近的
REPLACE()
查询中的一个单引号转义单引号是't working for you (like it didn' t,则可以在查询之前使用SET QUOTED_IDENTIFIER OFF
,然后在查询之后使用SET QUOTED_IDENTIFIER ON
.例如
这应该工作
2 ways to work around this:
对于
'
,你可以简单地在字符串中加倍,例如select 'I''m happpy' -- will get: I'm happy
对于任何你不确定的字符:在sql server中你可以通过
select unicode(':')
得到任何char的unicode所以这种情况你也可以
select 'I'+nchar(39)+'m happpy'