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

我正在尝试insert一些文本数据插入SQL Server 9 中的表中。

文本包含一个单引号(')。

我该如何逃避呢?

我尝试使用两个单引号,但是这给我带来了一些错误。

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

答案

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.
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.')

报价加倍本来可以奏效,所以它对您不起作用很奇怪。但是,另一种方法是在字符串周围使用双引号而不是单引号。即

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

解决此问题的 2 种方法:


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


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

因此,在这种情况下,您还可以select 'I'+nchar(39)+'m happpy'

另外要注意的另一件事是,它是否确实存储为经典的 ASCII'(ASCII 27)或 Unicode 2019(看起来相似,但不相同)。

这在插入内容上没什么大不了的,但是它可能意味着选择和更新的世界。
如果它是 unicode 值,则在 WHERE 子句中转义 '(例如,blah ='Workers's Comp')将返回,就像如果 “Worker's Comp” 中的 “ unicode 值。

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

一种简单的确认方法是执行某种开放式查询,该查询将带回您要搜索的值,然后将其复制并粘贴到 notepad ++ 或其他支持 unicode 的编辑器中。

ASCII 值和 unicode 值之间的不同外观应该对眼睛来说很明显,但是如果您偏向肛门,则在十六进制编辑器中它将显示为 27(ascii)或 92(unicode)。

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

insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
"UPDATE my_table SET row =\"hi, my name's tim.\";

只需在插入任何内容之前插入一个 '。它将像 sqlServer 中的转义字符

示例:当您有一个 as 时, 我很好 。您可以这样做:UPDATE my_table SET row ='我很好。';

SELECT ''''