我想使用带转义字符的引号。当一个人有一个特殊的字符时,我如何避免以下错误?
字符串后未闭合的引号。
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 colA, colB, colC FROM tableD WHERE colA = 'John''s Mobile'
如果动态生成 SQL,也可以使用 REPLACE(@name, '''', '''''')
REPLACE(@name, '''', '''''')
如果希望在 like 语句中转义,则需要使用 ESCAPE 语法
同样值得一提的是,如果您不考虑 SQL 注入攻击,那么您将使自己处于开放状态。更多信息在谷歌或: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F
您可以定义转义字符,但是只能在 LIKE子句中使用它。
LIKE
SELECT columns FROM table WHERE column LIKE '%\%%' ESCAPE '\'
这里它将搜索整个字符串中的 %,这就是在 SQL Server中如何使用 ESCAPE标识符的方法。
%
SQL Server
ESCAPE
为了使代码易于阅读,可以使用方括号 []引用包含 '的字符串,反之亦然。
[]
可以在要转义的值之前使用 **\**字符 insert into msglog(recipient) values('Mr. O\'riely') select * from msglog where recipient = 'Mr. O\'riely'
**\**
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 '^';
来自: 转义下划线