在SQL Server中的转义字符
在SQL Server中,如果要转义字符'
,只需在其前面再加一个'
。如下所示,可以通过这种方式转义单引号: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 = ' EXECUTE sp_executesql @sql, N'VARCHAR(10)', 'AAA'
为什么这是被接受的答案?它没有回答问题。
无论是使用我的答案中的第一部分(将引号加倍,如下面的其他答案所示),还是使用我推荐的在字符串变量中构建SQL查询的首选方法 - 使用参数化SQL,都可以回答问题。无论哪种方式,都是对问题的回答。
它没有回答问题。有时用户需要ODBC连接,这意味着只能使用纯SQL。
编辑答案,使其更清晰、更符合问题的要求。
在SQL Server中,有时候我们需要在字符串中插入引号,但是直接使用引号会导致语法错误。为了解决这个问题,我们可以使用转义字符来转义引号。
例如,我们可以使用两个单引号来转义引号。如下所示:
select 'it''s escaped'
这样,结果就会显示为:
it's escaped
这里的两个单引号就起到了转义的作用,告诉SQL Server将第一个单引号作为字符串的开始,将第二个单引号作为字符串的一部分。
这种方法可以用于转义任何需要转义的字符,不仅仅是引号。只需要在需要转义的字符前面添加一个转义字符即可。
这是一种简单而有效的解决方法,可以帮助我们在SQL Server中插入特殊字符而不会导致语法错误。