我正在尝试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 ''''