SQL Server中的转义符


Answers:


72

要逃脱,'您只需在前面加上另一个即可:''

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

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'

29
为什么这是公认的答案?它没有回答问题。
彼得·摩尔

3
@PeterMoore OP可能会使用我的答案的第一部分(将引号加倍,如以下其他答案所示),或者会使用我建议的首选方法在字符串变量中建立SQL查询-使用参数化SQL。无论哪种方式,两者都是问题的答案
AdaTheDev

它没有回答问题。有时用户需要ODBC连接,这意味着您只能使用纯SQL。
托尼

编辑答案,使其更清晰,更适合该问题


43

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

例:

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

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


21

您只需要在字符串内部替换'''

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

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

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

还值得一提的是,如果您不考虑SQL注入攻击,那么您将自己敞开大门。有关更多信息,请访问Google或:http : //it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F


但是dugokontov或RichardPianka的答案没有类似的-1吗?
Seph 2014年

@MichaelMunsey自己尝试:select '返回错误Unclosed quotation mark after the character string ''。我的答案中无处使用"两个',不确定为什么我的投票是唯一的否决。
Seph 2015年


0

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


0

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

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

@userinput现在将在每次引用时都转义,并带有一个额外的单引号



-2

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


这是不正确的。括号用于字段,表或架构名称中的非法字符。
杰米·马歇尔

是的,是的,它是对象名称,而不是字符串内容。我必须看错这个问题。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.