SQL Server 中的转义字符

Posted

技术标签:

【中文标题】SQL Server 中的转义字符【英文标题】:Escape Character in SQL Server 【发布时间】:2011-07-05 14:47:15 【问题描述】:

我想使用带转义字符的引号。我该怎么办?

我在 SQL Server 中收到错误

字符串后的非右引号。

我正在varchar 变量中编写 SQL 查询,但我收到了该错误:

字符串后的非右引号。

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

【问题讨论】:

您能否显示我们的查询?? How do I escape a single quote in SQL Server?的可能重复 【参考方案1】:
WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';

来自: SQL Server Escape an Underscore

【讨论】:

【参考方案2】:

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

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

@userinput 现在将在每次出现引号时用一个额外的单引号进行转义

【讨论】:

【参考方案3】:

要逃避',你只需要在前面加上另一个:''

正如第二个答案所示,可以像这样转义单引号:

select 'it''s escaped'

结果是

it's escaped

如果您要将 SQL 连接到 VARCHAR 中执行(即动态 SQL),那么我建议您对 SQL 进行参数化。这样做的好处是有助于防止 SQL 注入,另外意味着您不必担心像这样转义引号(您可以通过加倍引号来实现)。

例如而不是做

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'

【讨论】:

为什么这是公认的答案?它没有回答问题。 @PeterMoore OP 会使用我答案的第一部分(根据下面的其他答案将引号加倍),或者会使用我推荐的首选方法来构建 SQL 查询在字符串变量中 - 使用参数化 SQL。无论哪种方式,两者都是问题的答案 它没有回答这个问题。有时用户需要 ODBC 连接,这意味着您只能使用纯 SQL。 编辑的答案更清晰,更适合问题【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

这是不正确的。括号适用于字段、表或模式名称中的非法字符。 是的,没错,它用于对象名称,而不是字符串内容。我必须把问题读错了。【参考方案6】:

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

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

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

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

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

【讨论】:

然而 dugokontov 或 RichardPianka 的答案没有任何类似的 -1? @MichaelMunsey 自己尝试一下:select ' 返回错误Unclosed quotation mark after the character string ''。在我的答案中,我没有使用" 仅两个',不知道为什么我的答案是唯一的反对票。【参考方案7】:

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

例子:

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

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

【讨论】:

【参考方案8】:

你可以这样转义引用:

select 'it''s escaped'

结果是

it's escaped

【讨论】:

这应该是答案。【参考方案9】:

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

【讨论】:

以上是关于SQL Server 中的转义字符的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server LIKE 查询中需要转义哪些字符[重复]

在 python 中,将数据插入 SQL Server 时如何转义特殊字符?

带有 JSP 的 JDBC 连接字符串 SQL Server 导致“非法转义字符”错误

通过 JTDS 驱动程序执行 SQL Server 调用时出现“第 24 行位置的 JDBC 转义语法无效 '=' 预期字符”错误的原因?

oracle怎么将字符串中的转义符

将数据从 SQL Server Express 导出到 CSV(需要引用和转义)