【发布时间】:2011-07-05 14:47:15
【问题描述】:
我想使用带转义字符的引号。我该怎么办?
我在 SQL Server 中收到错误
字符串后的非右引号。
我正在varchar 变量中编写 SQL 查询,但我收到了该错误:
字符串后的非右引号。
我想使用引号作为转义字符。
【问题讨论】:
-
您能否显示我们的查询??
标签: sql-server escaping char
我想使用带转义字符的引号。我该怎么办?
我在 SQL Server 中收到错误
字符串后的非右引号。
我正在varchar 变量中编写 SQL 查询,但我收到了该错误:
字符串后的非右引号。
我想使用引号作为转义字符。
【问题讨论】:
标签: sql-server escaping char
WHERE username LIKE '%[_]d'; -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
【讨论】:
如果您想在变量中转义用户输入,您可以在 SQL 中执行如下操作
Set @userinput = replace(@userinput,'''','''''')
@userinput 现在将在每次出现引号时用一个额外的单引号进行转义
【讨论】:
要逃避',你只需要在前面加上另一个:''
正如第二个答案所示,可以像这样转义单引号:
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'
【讨论】:
您可以在要转义的值之前使用 **\** 字符,例如
insert into msglog(recipient) values('Mr. O\'riely')
select * from msglog where recipient = 'Mr. O\'riely'
【讨论】:
为了使代码易于阅读,您可以使用方括号[] 来引用包含' 的字符串,反之亦然。
【讨论】:
您只需将字符串中的' 替换为''
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 ''。在我的答案中,我没有使用" 仅两个',不知道为什么我的答案是唯一的反对票。
您可以定义转义字符,但只能将其与LIKE 子句一起使用。
例子:
SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'
在这里它将在整个字符串中搜索%,这就是在SQL Server 中使用ESCAPE 标识符的方式。
【讨论】:
你可以这样转义引用:
select 'it''s escaped'
结果是
it's escaped
【讨论】:
MSSQL 中的转义引号是通过双引号完成的,因此'' 或"" 将分别产生一个转义的' 和"。
【讨论】: