Экранирование одинарной кавычки в SQL Server: верный способ

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для экранирования одинарной кавычки в SQL Server используют двойные одинарные кавычки ''. Так SQL Server понимает, что кавычка является символом, а не разделителем строк:

SQL
Скопировать код
-- Идем на вечеринку к O'Brien 
INSERT INTO party_location (address) VALUES ('O''Brien''s');

Обработка избыточных одинарных кавычек

Если в данных есть лишние одинарные кавычки, можно применить функцию REPLACE(). Она заменяет все одинарные кавычки в столбце на двойные одинарные кавычки, тем самым эффективно решая задачу их экранирования:

SQL
Скопировать код
-- Обработка коварных апострофов
UPDATE addresses
SET street = REPLACE(street, '''', '''''')
WHERE street LIKE '%''%';

Мягкий способ для динамического SQL

Динамические SQL-запросы могут требовать склеивания нескольких строк. К счастью, использование CHAR(39) дает вам возможность формировать SQL-строки, исключая одинарные кавычки из итогового формата:

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
Скопировать код
-- Кто мог подумать, что в SQL можно использовать двойные кавычки?
SET QUOTED_IDENTIFIER ON;
SELECT *
FROM authors
WHERE surname = "O'Brien";
SET QUOTED_IDENTIFIER OFF;

Визуализация

Покажем это на примере текстового сообщения:

Markdown
Скопировать код
Обычный текст: **Привет, это я.**

Представьте, что одинарная кавычка – это символ на клавиатуре, который может исчезнуть из текста!

Markdown
Скопировать код
Текст SQL Server: [📲]

Чтобы гарантировать, что символ останется в нашем тексте, добавляем второй идентичный символ (еще одну одинарную кавычку):

SQL
Скопировать код
Безопасный текст: 'Привет, это'' я.'

Доставлено без потери символа:

Markdown
Скопировать код
📲 -> Полученный текст: **Привет, это я.**

С дублированием символа на клавиатуре (одинарной кавычки), SQL Server теперь в состоянии идеально распознавать текст.

Основные методы для специфических сценариев

Играем с Unicode

В некоторых ситуациях, особенно при работе с мультиязычным контентом, может быть целесообразно или же необходимо использовать Unicode-коды для кодирования одинарной кавычки:

SQL
Скопировать код
-- Будь как Unicode, мой друг 
SELECT 'Paris' + NCHAR(39) + 's Eiffel Tower';

Выводим выражения со символом

Если нужно вывести выражение в SQL с встроенными кавычками, используйте конкатенацию:

SQL
Скопировать код
-- В SQL, CHAR(39) стоит своего веса в золоте
PRINT 'Priority' + CHAR(39) + 's high.';

Эти методы гарантированно выводят результат без вызова ошибок.

Укрощаем двойные кавычки

В некоторых сценариях допустимо использование двойных кавычек для строковых литералов:

SQL
Скопировать код
-- Даем пропуск двойным кавычкам
SET QUOTED_IDENTIFIER OFF;
EXEC('SELECT * FROM boroughs WHERE name = "King''s Landing"');
SET QUOTED_IDENTIFIER ON;

Это делает SQL-команды более понятными. Однако будьте осторожны, так как это может повлиять на другие SQL-выражения или настройки базы данных.

Полезные материалы

  1. Stack Overflow: Различные способы экранирования одинарных кавычек в SQLМетоды и примеры работы с кавычками в SQL-запросах.
  2. Пояснение TechOnTheNet: Функция REPLACE в SQL Server — Детальное руководство по использованию функции REPLACE в SQL Server.
  3. Учебный пункт SQL: Работа со строками в SQLСтроковые функции для работы с кавычками в SQL.