Экранирование одинарной кавычки в SQL Server: верный способ
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для экранирования одинарной кавычки в SQL Server используют двойные одинарные кавычки ''
. Так SQL Server понимает, что кавычка является символом, а не разделителем строк:
-- Идем на вечеринку к O'Brien
INSERT INTO party_location (address) VALUES ('O''Brien''s');
Обработка избыточных одинарных кавычек
Если в данных есть лишние одинарные кавычки, можно применить функцию REPLACE()
. Она заменяет все одинарные кавычки в столбце на двойные одинарные кавычки, тем самым эффективно решая задачу их экранирования:
-- Обработка коварных апострофов
UPDATE addresses
SET street = REPLACE(street, '''', '''''')
WHERE street LIKE '%''%';
Мягкий способ для динамического SQL
Динамические SQL-запросы могут требовать склеивания нескольких строк. К счастью, использование CHAR(39)
дает вам возможность формировать SQL-строки, исключая одинарные кавычки из итогового формата:
-- CHAR(39) – секретный ингредиент бабушкиного SQL-рецепта
DECLARE @DynamicSQL nvarchar(1000);
SET @DynamicSQL = 'SELECT * FROM menu WHERE dish_name = ' + CHAR(39) + 'Fish n'' Chips' + CHAR(39) + ';';
EXEC sp_executesql @DynamicSQL;
Читаемость – важно
Читаемость SQL-скриптов исключительно важна. С помощью SET QUOTED_IDENTIFIER ON
, вы можете сделать свои скрипты понятными и чистыми. Но не забудьте вернуть параметр QUOTED_IDENTIFIER в OFF, чтобы не создать проблемы для других SQL-запросов:
-- Кто мог подумать, что в SQL можно использовать двойные кавычки?
SET QUOTED_IDENTIFIER ON;
SELECT *
FROM authors
WHERE surname = "O'Brien";
SET QUOTED_IDENTIFIER OFF;
Визуализация
Покажем это на примере текстового сообщения:
Обычный текст: **Привет, это я.**
Представьте, что одинарная кавычка – это символ на клавиатуре, который может исчезнуть из текста!
Текст SQL Server: [📲]
Чтобы гарантировать, что символ останется в нашем тексте, добавляем второй идентичный символ (еще одну одинарную кавычку):
Безопасный текст: 'Привет, это'' я.'
Доставлено без потери символа:
📲 -> Полученный текст: **Привет, это я.**
С дублированием символа на клавиатуре (одинарной кавычки), SQL Server теперь в состоянии идеально распознавать текст.
Основные методы для специфических сценариев
Играем с Unicode
В некоторых ситуациях, особенно при работе с мультиязычным контентом, может быть целесообразно или же необходимо использовать Unicode-коды для кодирования одинарной кавычки:
-- Будь как Unicode, мой друг
SELECT 'Paris' + NCHAR(39) + 's Eiffel Tower';
Выводим выражения со символом
Если нужно вывести выражение в SQL с встроенными кавычками, используйте конкатенацию:
-- В SQL, CHAR(39) стоит своего веса в золоте
PRINT 'Priority' + CHAR(39) + 's high.';
Эти методы гарантированно выводят результат без вызова ошибок.
Укрощаем двойные кавычки
В некоторых сценариях допустимо использование двойных кавычек для строковых литералов:
-- Даем пропуск двойным кавычкам
SET QUOTED_IDENTIFIER OFF;
EXEC('SELECT * FROM boroughs WHERE name = "King''s Landing"');
SET QUOTED_IDENTIFIER ON;
Это делает SQL-команды более понятными. Однако будьте осторожны, так как это может повлиять на другие SQL-выражения или настройки базы данных.
Полезные материалы
- Stack Overflow: Различные способы экранирования одинарных кавычек в SQL — Методы и примеры работы с кавычками в SQL-запросах.
- Пояснение TechOnTheNet: Функция REPLACE в SQL Server — Детальное руководство по использованию функции
REPLACE
в SQL Server. - Учебный пункт SQL: Работа со строками в SQL — Строковые функции для работы с кавычками в SQL.