14

Как экранировать одинарную кавычку в SQL Server?

11

Я пытаюсь вставить текстовые данные в таблицу в SQL Server 9. В тексте есть одинарная кавычка ('). Как правильно экранировать этот символ?

Я пробовал использовать две одинарные кавычки, но у меня возникли ошибки. Пример:

insert into my_table values('hi, my name''s tim.');

Кто-нибудь может помочь с этой проблемой?

5 ответ(ов)

20

В 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.

Таким образом, чтобы включить одну кавычку в строку, необходимо использовать две одинарные кавычки подряд.

0

Если экранирование одиночной кавычки с помощью другой одиночной кавычки не срабатывает (как это произошло в одном из моих недавних запросов с использованием 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

Этот подход обеспечит правильную интерпретацию одиночных кавычек в ваших запросах.

0

В вашем SQL-запросе вы пытаетесь вставить строку, которая содержит одинарную кавычку. Однако строка окружена одинарными кавычками, и поэтому SQL не может корректно интерпретировать её. Чтобы правильно вставить строку с одинарной кавычкой, нужно удвоить одинарные кавычки внутри строки.

Вот правильный вариант вашего запроса:

INSERT INTO my_table VALUES('hi, my name''s tim.');

Таким образом, вы заменяете char(39) на две одинарные кавычки '', что является стандартным способом экранирования одинарной кавычки в SQL.

0

2 способа обойти эту проблему:


Для символа ' вы можете просто удвоить его в строке, например:
select 'I''m happy' — результат будет: I'm happy.


Для любого символа, в котором вы не уверены: в SQL Server вы можете получить юникод любого символа, используя select unicode(':') (запомните число).

В этом случае вы также можете использовать: select 'I' + nchar(39) + 'm happy'.

0

Удвоение кавычек должно было сработать, поэтому странно, что это не сработало у вас. Однако есть альтернатива: используйте двойные кавычки вместо одинарных вокруг строки. То есть:

insert into my_table values("hi, my name's tim.");
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь