SQLServer 中的转义字符

我想使用带转义字符的引号。当一个人有一个特殊的字符时,我如何避免以下错误?

字符串后未闭合的引号。

590755 次浏览

MSSQL 中的转义引号是通过双引号完成的,因此 ''""将分别生成一个转义 '"

要转义 ',您只需要在前面放置另一个: ''

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

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'

你可以像下面这样转义引用:

select 'it''s escaped'

结果就是

it's escaped

您只需要在字符串中用 ''替换 '

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

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

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

同样值得一提的是,如果您不考虑 SQL 注入攻击,那么您将使自己处于开放状态。更多信息在谷歌或: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F

您可以定义转义字符,但是只能在 LIKE子句中使用它。

例如:

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

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

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

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

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

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

@ userinput 现在将在每次出现引号时使用额外的单引号转义

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';

来自: 转义下划线