Escape-символ в SQL Server


Я хочу использовать цитату с escape-символом. Как я могу это сделать?

Я получил ошибку в SQL Server

незамкнутая кавычка после символьная строка.

Я пишу sql-запрос в переменной varchar, но я получил эту ошибку:

незамкнутая кавычка после символьная строка.

Я хочу использовать кавычки в качестве escape char.

спасибо вперед

5 55

5 ответов:

Если вы объединяете 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

вы можете определить свой escape-символ, но вы можете использовать его только с LIKE предложения.

пример:

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

здесь он будет искать % во всей строке, и это, как можно использовать ESCAPE код SQL Server.

вам нужно просто заменить ' С '' внутри строки

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

вы также можете использовать REPLACE(@name, '''', '''''') Если генерация SQL динамически

если вы хотите бежать внутри подобного оператора, то вам нужно использовать синтаксис ESCAPE

также стоит упомянуть, что вы оставляете себя открытыми для атак SQL-инъекций, если вы не рассматриваете это. Дополнительная информация в Google или: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F

экранирование кавычек в MSSQL выполняется с помощью двойной кавычки, поэтому a '' или "" произведет один экранированный ' и ", соответственно.