SQL Server中的转义字符

时间:2011-02-28 08:45:01

标签: sql-server escaping char

我想使用带有转义字符的引号。我能怎么做?

我在SQL Server中收到错误

  

之后的未公开引号   字符串。

我在varchar变量中编写sql查询但是我收到了错误:

  

之后的未公开引号   字符串。

我想用引号作为转义字符。

提前致谢

9 个答案:

答案 0 :(得分:89)

你可以像这样逃避引用:

select 'it''s escaped'

结果将是

it's escaped

答案 1 :(得分:56)

如果要将SQL连接到要执行的VARCHAR(即动态SQL),那么我建议参数化SQL。这有助于防止SQL注入加上意味着你不必担心像这样转义引号(你通过加倍引号来做)。

e.g。而不是做

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = ''AAA'''
EXECUTE(@SQL)

试试这个:

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1'
EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA'

答案 2 :(得分:33)

您可以定义转义字符,但只能将其与LIKE子句一起使用。

示例:

SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'

此处它将在整个字符串中搜索%,这就是ESCAPESQL Server标识符的使用方式。

答案 3 :(得分:16)

您只需将'替换为字符串中的''

即可
SELECT colA, colB, colC
FROM tableD
WHERE colA = 'John''s Mobile'

如果动态生成SQL,您还可以使用REPLACE(@name, '''', '''''')

如果要在类似语句中转义,则需要使用ESCAPE语法

值得一提的是,如果你不考虑它,你会让自己接受SQL注入攻击。更多信息,请访问Google或:http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F

答案 4 :(得分:12)

MSSQL中的转义引用是通过双引号完成的,因此''""将分别生成一个转义'"

答案 5 :(得分:0)

要使代码易于阅读,可以使用方括号[]引号包含'的字符串,反之亦然。

答案 6 :(得分:0)

您可以在要转义的值之前使用**\**字符,例如 insert into msglog(recipient) values('Mr. O\'riely') select * from msglog where recipient = 'Mr. O\'riely'

答案 7 :(得分:0)

如果要转义用户输入的变量,可以在SQL中执行以下操作

  Set @userinput = replace(@userinput,'''','''''')

@userinput现在将在每次引用时都转义并带有一个额外的单引号

答案 8 :(得分:0)

Species             p1    p2    ...
Iris-Setosa         3.00  3.10  ...
Iris-versicolor     2.30  2.50  ...

从: SQL Server Escape an Underscore