Я хочу использовать кавычки с escape-символом. Как я могу сделать?
Я получил ошибку в SQL Server
Незакрытые кавычки после символьной строки.
Я пишу SQL-запрос в varchar
переменной, но получил эту ошибку:
Незакрытые кавычки после символьной строки.
Я хочу использовать кавычки в качестве escape-символа.
sql-server
escaping
char
esquare
источник
источник
Ответы:
Чтобы сбежать,
'
вам просто нужно поставить еще один перед:''
Как показывает второй ответ, можно избежать одиночной кавычки следующим образом:
select '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'
результат будет
источник
Вы можете определить свой 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 динамическиЕсли вы хотите избежать внутри оператора like, вам необходимо использовать синтаксис ESCAPE
Также стоит упомянуть, что вы оставляете себя уязвимым для атак SQL-инъекций, если не учитываете это. Дополнительная информация в Google или: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F
источник
select '
возвращает ошибкуUnclosed quotation mark after the character string ''
. Я нигде в своем ответе не использую"
только два'
, не зная, почему мой единственный ответ с отрицательными голосами.Экранирующие кавычки в MSSQL выполняются с помощью двойных кавычек, поэтому a
''
или a""
создадут одну экранированную'
и"
, соответственно.источник
Вы можете использовать
**\**
символ перед значением, которое хотите избежать, например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 '^';
ОТ: SQL Server Escape an Underscore
источник
Чтобы код было легко читать, вы можете использовать квадратные скобки
[]
для заключения строки, содержащей его,'
или наоборот.источник