SQL Server中的转义字符

esq*_*are 82 sql-server escaping char

我想使用带有转义字符的引号.我能怎么做?

我在SQL Server中收到错误

字符串后面的未闭合引号.

我在varchar变量中编写sql查询但是我收到了这个错误:

字符串后面的未闭合引号.

我想用引号作为转义字符.

提前致谢

dug*_*tov 103

你可以像这样逃避报价:

select 'it''s escaped'
Run Code Online (Sandbox Code Playgroud)

结果将是

it's escaped
Run Code Online (Sandbox Code Playgroud)


Ada*_*Dev 62

如果您将SQL连接到要执行的VARCHAR(即动态SQL),那么我建议参数化SQL.这有助于防止SQL注入加上意味着你不必担心像这样转义引号(你通过加倍引号来做).

例如,而不是做

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = ''AAA'''
EXECUTE(@SQL)
Run Code Online (Sandbox Code Playgroud)

试试这个:

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1'
EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA'
Run Code Online (Sandbox Code Playgroud)

  • 为什么这是公认的答案?它没有回答这个问题. (19认同)
  • @PeterMoore要么OP会使用我的答案的第一部分(根据下面的其他答案加倍引用),或者会使用我建议在字符串变量中构建SQL查询的首选方法 - 使用参数化SQL.无论哪种方式,两者都是问题的答案 (3认同)

小智 36

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

例:

SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'
Run Code Online (Sandbox Code Playgroud)

在这里它将搜索%整个字符串,这是如何使用ESCAPE标识符SQL Server.


Sep*_*eph 18

你需要只需更换'''您的字符串内

SELECT colA, colB, colC
FROM tableD
WHERE colA = 'John''s Mobile'
Run Code Online (Sandbox Code Playgroud)

您还可以使用REPLACE(@name, '''', '''''')if动态生成SQL

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

值得一提的是,如果你不考虑它,你会让自己接受SQL注入攻击.有关Google的更多信息,请访问:http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F


Ric*_*nka 12

在MSSQL转义引号用双引号完成的,所以''还是""会产生一个逃脱'",分别.