我正在尝试 insert 将一些文本数据放入 SQL Server 中的表格中 .
insert
SQL Server
该文本包括单引号(') .
我怎么逃避呢?
我尝试使用两个单引号,但它给我一些错误 .
例如 . insert into my_table values('hi, my name''s tim.');
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 .
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 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(':') 得到任何字符的unicode
select unicode(':')
所以这种情况你也可以 select 'I'+nchar(39)+'m happpy'
select 'I'+nchar(39)+'m happpy'
这应该工作
DECLARE @singleQuote CHAR SET @singleQuote = CHAR(39) insert into my_table values('hi, my name'+ @singleQuote +'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.
怎么样:
insert into my_table values('hi, my name'+char(39)+'s tim.')
string value = "Abhishek's"; value = Replace(value,"'","''");
另外要注意的是它是否真的存储为经典的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) .
我'm agree with Cory Larson. When I'使用SQL Server 2005我使用单引号来逃避单引号 . 这听起来很奇怪,但它对我有用 . 试试吧 .
参考:SQL Server 2005 escaping quotes
引用的加倍应该有效,所以它特别适用于你;但是,另一种方法是在字符串周围使用双引号字符而不是单引号字符 . 即,
insert into my_table values("hi, my name's tim." );
insert into my_table values("hi, my name's tim."
9 回答
如果对于我最近的一个
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(':')
得到任何字符的unicode所以这种情况你也可以
select 'I'+nchar(39)+'m happpy'
这应该工作
Single quotes are escaped by doubling them up ,正如你在你的例子中向我们展示的那样 . 以下SQL说明了此功能 . 我在SQL Server 2008上测试过它:
结果
怎么样:
另外要注意的是它是否真的存储为经典的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) .
我'm agree with Cory Larson. When I'使用SQL Server 2005我使用单引号来逃避单引号 . 这听起来很奇怪,但它对我有用 . 试试吧 .
参考:SQL Server 2005 escaping quotes
引用的加倍应该有效,所以它特别适用于你;但是,另一种方法是在字符串周围使用双引号字符而不是单引号字符 . 即,
insert into my_table values("hi, my name's tim."
);