Как мне избежать одиночной кавычки в SQL Server?

Я пытаюсь insert некоторые текстовые данные в таблицу в SQL Server 9.

Текст включает в себя одну цитату (‘).

Как мне избежать этого?

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

например. insert into my_table values('hi, my name''s tim.');

754

Решение

Одиночные кавычки избегаются путем удвоения их, так же, как вы показали нам в своем примере. Следующий 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.
1113

Другие решения

Если экранирование одной цитаты с другой одинарной цитатой не работает для вас (как это не было для одного из моих недавних 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;
-- set OFF then ON again
63

Как насчет:

insert into my_table values('hi, my name'+char(39)+'s tim.')
36

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

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

16

Также следует обратить внимание на то, действительно ли он хранится как классический ASCII ‘(ASCII 27) или Unicode 2019 (который выглядит аналогично, но не одинаково).

Это не имеет большого значения для вставок, но это может означать мир выбора и обновления.
Если это значение в юникоде, то экранирование ‘в предложении WHERE (например, где blah =’ Workers»s Comp ‘) вернет, что искомого значения не существует, если’ в «Worker’s Comp» на самом деле значение Юникода.

Если ваше клиентское приложение поддерживает ввод с произвольным ключом, а также копирование и вставку на основе ввода, это может быть Unicode в одних строках и ASCII в других!


Простой способ подтвердить это — выполнить какой-то открытый запрос, который вернет искомое значение, а затем скопировать и вставить его в notepad ++ или другой редактор, поддерживающий юникод.

Различный вид между значением ascii и значением unicode должен быть очевиден для глаз, но если вы склонитесь к анальному, в шестнадцатеричном редакторе он будет отображаться как 27 (ascii) или 92 (unicode).

5

2 способа обойти это:


за ' Вы можете просто удвоить его в строке, например,
select 'I''m happpy' -- will get: I'm happy


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

Так что в этом случае вы также можете select 'I'+nchar(39)+'m happpy'

3

Это должно работать

DECLARE @singleQuote CHAR
SET @singleQuote =  CHAR(39)

insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
0

Я согласен с Кори Ларсоном. Когда я использую SQL Server 2005 Я использую одиночную кавычку, чтобы избежать одиночной кавычки. Это звучит странно, но это работает для меня. Попробуй с этим.

Ссылка: SQL Server 2005 экранирование кавычек

-5
По вопросам рекламы [email protected]