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 转义语法无效 '=' 预期字符”错误的原因?