我想使用带有转义字符的引号。我能怎么做?
我在SQL Server中收到错误
之后的未公开引号 字符串。
我在varchar变量中编写sql查询但是我收到了错误:
之后的未公开引号 字符串。
我想用引号作为转义字符。
提前致谢
答案 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 '\'
此处它将在整个字符串中搜索%
,这就是ESCAPE
中SQL 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 ...