Ms sql экранирование кавычек

Я пытался выполнить приведенный ниже оператор, чтобы избежать одиночных кавычек (то есть, используя две одинарные кавычки):

Я даже пытался использовать char(39) вместо кавычек:

Но это не помогло. Это единственные два решения, которые я нашел на этом сайте. Любая помощь?

Это упрощенный запрос, чтобы прояснить все ваши вопросы:

Я хочу добиться этого, но с помощью динамического запроса.

3 ответа

Слово совета. При тестировании динамического сценария сначала просто отобразите его, а не выполняйте. Таким образом, вы сможете увидеть это точно так, как это будет видно из заявления EXEC .

Теперь к вопросу. Следует помнить, что вы не передаете переменную в SplitValues а вместо этого объединяете значение переменной в сценарии. Поскольку значение varchar , оно должно быть заключено в кавычки. Отсутствие их – единственная проблема на самом деле.

Кавычки вокруг второго аргумента, запятой, в обоих случаях корректно экранируются. Итак, просто используйте любой из методов, чтобы добавить кавычки вокруг первого аргумента:

Очевидно, что первый метод более компактен, но, как я уже сказал, оба работают хорошо, как ясно показывает эта демонстрация SQL Fiddle .

Обратите внимание, однако, что вы могли бы легко избежать этой проблемы, если вы простите за каламбур. Вместо EXEC () вы можете использовать EXEC sp_executesql , который позволяет вам использовать параметры . Вот тот же сценарий, переписанный для использования sp_executesql :

Как видите, не нужно беспокоиться о экранировании кавычек: SQL Server берет на себя задачу правильной подстановки значений, а не вы.

В PL/SQL блоке, как экранировать одиночные кавычки в строчном литерале?

Читайте также:  Dumper bruteforce как пользоваться

Пробую так, но это не работает:

1 ответ 1

Используйте альтернативное квотирование с вводным символом Q или q :

Ограничителем может быть любой символ отличный от пробельных, и он же должен завершать литерал перед последней одиночной кавычкой. Исключение скобки – <,(,[, , где в конце ожидается соответствующая закрывающаяся скобка.

Также, можно использовать две одиночные кавычки следующие друг за другом:

Но синтаксис квотирования с Q более гибкий и читабельный.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками sql oracle plsql или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.14.35781

Идея этого блога возникла из ошибок, которые я допускаю, исходя из неверных предположений. Читайте документацию, чтобы развеять ошибочные представления.

Одной из моих любимых команд SQL являлась QUOTENAME. При программировании генерации кода обычно возникает необходимость заключать строковое значение в кавычки и экранировать любые символы, совпадающие с теми, которыми вы ограничиваете строку, их удвоением. (А если у вас пара таких символов в строке, вам их потребуется уже четыре.) Например, чтобы взять следующую строку в одинарные кавычки (‘):

Чтобы иметь возможность использовать её в динамическом операторе или объявлении переменной, потребуется удвоить одинарную кавычку в строке:

Или, если вы Rob Volk (@sql_r на Twitter), и хотите создать раздражающую базу данных на вашем лучшем заклятом SQL Server, то, чтобы включить скобки в имя базы типа:

вам придется сделать так:

Удваивается закрывающая скобка, но не открывающая. Для экранирования можно использовать QUOTENAME. Параметрами этой функции являются строка и разделитель. По умолчанию удваивается скобка как у большинства имён SQL Server, хотя вы можете использовать любой символ для удвоения. Так для нашей строки:

Читайте также:  Apple mfi список производителей

Этот код вернет

objectName string
Mr. O’Malley [Mr. O’Malley] ‘Mr. O»Malley’

Кажется, работает отлично, поэтому вы чувствуете, что, если вам потребуется нагенерировать некоторый код, вы сможете поступить так:

Оцените статью
ПК Знаток
Добавить комментарий

Adblock
detector