Escape Character в SQL Server
Я хочу использовать цитату с escape-символом. Как я могу сделать?
Я получил ошибку в SQL Server
Незакрытый кавычек после символьная строка.
Я пишу sql-запрос в переменной varchar, но я получил эту ошибку:
Незакрытый кавычек после символьная строка.
Я хочу использовать кавычку как escape char.
Заранее спасибо
Ответы
Ответ 1
Если вы объединяете 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'
Ответ 2
Вы можете избежать цитаты следующим образом:
select 'it' escaped'
результат будет
it escaped
Ответ 3
Вы можете определить свой escape-символ, но вы можете использовать его только с предложением LIKE
.
Пример:
SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'
Здесь он будет искать %
в цельной строке, и именно так можно использовать идентификатор ESCAPE
в SQL Server
.
Ответ 4
Вам нужно просто заменить '
с ''
внутри вашей строки
SELECT colA, colB, colC
FROM tableD
WHERE colA = 'John' Mobile'
Вы также можете использовать REPLACE(@name, '''', '''''')
если генерируете SQL динамически
Если вы хотите выйти внутри оператора like, вам нужно использовать синтаксис ESCAPE
Стоит также отметить, что вы оставляете себя открытым для атак с использованием SQL-инъекций, если не учитываете это. Дополнительная информация в Google или: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F
Ответ 5
Кавычки с экранированием в MSSQL выполняются двойной кавычкой, поэтому ''
или ""
будут выдавать один escaped '
и "
соответственно.
Ответ 6
Чтобы код был легко читаемым, вы можете использовать квадратные скобки []
чтобы заключить строку, содержащую '
или наоборот.