Как экранировать одинарную кавычку в SQL Server?
Я пытаюсь вставить текстовые данные в таблицу в SQL Server 9. В тексте есть одинарная кавычка ('). Как правильно экранировать этот символ?
Я пробовал использовать две одинарные кавычки, но у меня возникли ошибки. Пример:
insert into my_table values('hi, my name''s tim.');
Кто-нибудь может помочь с этой проблемой?
5 ответ(ов)
В SQL одинарные кавычки экранируются путем их удваивания, как вы уже показали в своем примере. Следующий запрос иллюстрирует эту функциональность. Я протестировал его на SQL Server 2008:
DECLARE @my_table TABLE (
[value] VARCHAR(200)
)
INSERT INTO @my_table VALUES ('hi, my name''s tim.')
SELECT * FROM @my_table
Результаты
value
==================
hi, my name's tim.
Таким образом, чтобы включить одну кавычку в строку, необходимо использовать две одинарные кавычки подряд.
Если экранирование одиночной кавычки с помощью другой одиночной кавычки не срабатывает (как это произошло в одном из моих недавних запросов с использованием REPLACE()
), вы можете использовать SET QUOTED_IDENTIFIER OFF
перед вашим запросом, а затем SET QUOTED_IDENTIFIER ON
после запроса.
Например:
SET QUOTED_IDENTIFIER OFF;
UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");
SET QUOTED_IDENTIFIER ON;
-- сначала устанавливаем OFF, а потом ON
Этот подход обеспечит правильную интерпретацию одиночных кавычек в ваших запросах.
В вашем SQL-запросе вы пытаетесь вставить строку, которая содержит одинарную кавычку. Однако строка окружена одинарными кавычками, и поэтому SQL не может корректно интерпретировать её. Чтобы правильно вставить строку с одинарной кавычкой, нужно удвоить одинарные кавычки внутри строки.
Вот правильный вариант вашего запроса:
INSERT INTO my_table VALUES('hi, my name''s tim.');
Таким образом, вы заменяете char(39)
на две одинарные кавычки ''
, что является стандартным способом экранирования одинарной кавычки в SQL.
2 способа обойти эту проблему:
Для символа '
вы можете просто удвоить его в строке, например:
select 'I''m happy'
— результат будет: I'm happy
.
Для любого символа, в котором вы не уверены: в SQL Server вы можете получить юникод любого символа, используя select unicode(':')
(запомните число).
В этом случае вы также можете использовать: select 'I' + nchar(39) + 'm happy'
.
Удвоение кавычек должно было сработать, поэтому странно, что это не сработало у вас. Однако есть альтернатива: используйте двойные кавычки вместо одинарных вокруг строки. То есть:
insert into my_table values("hi, my name's tim.");
Найти все таблицы, содержащие столбец с указанным именем
"Вставка результатов хранимой процедуры в временную таблицу"
Как выполнить оператор UPDATE с JOIN в SQL Server?
Функция против Хранимой процедуры в SQL Server
Следует ли мне использовать != или <> для обозначения "не равно" в T-SQL?