我想使用带转义字符的引号。当一个特殊字符出现时,如何避免以下错误?
字符字符串后有未闭合的引号。
字符字符串后有未闭合的引号。
你可以这样转义引号:
select 'it''s escaped'
结果将会是
it's escaped
为了转义 '
,您只需在其前面再加一个 '
正如第二个答案所示,可以像这样转义单引号:
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'
LIKE
子句中使用。SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'
这里将在整个字符串中搜索%
,这就是如何在SQL Server
中使用ESCAPE
标识符的方法。
您只需在字符串内将 '
替换为 ''
。
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 上找到。
select '
会返回错误 Unclosed quotation mark after the character string ''
。我的回答中没有使用 "
,只有两个 '
,不确定为什么我的回答是唯一一个被踩的。 - Seph在MSSQL中转义引号需要使用双引号,因此''
或""
会分别生成一个转义的'
和"
。
WHERE username LIKE '%[_]d'; -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
来自: SQL Server下划线转义
如果你想在SQL中避免用户输入的变量,可以像下面这样实现:
Set @userinput = replace(@userinput,'''','''''')
现在,每个引号的出现都会为 @userinput 增加一个额外的单引号来进行转义。
在编程中,您可以使用**\**
字符来转义需要转义的值,例如:
insert into msglog(recipient) values('Mr. O\'riely')
select * from msglog where recipient = 'Mr. O\'riely'
[]
来引用包含'
的字符串或反之亦然。