Я пытаюсь insert
некоторые текстовые данные в таблицу в SQL Server
9.
Текст включает в себя одну цитату (‘).
Как мне избежать этого?
Я пытался использовать две одинарные кавычки, но это привело меня к ошибкам.
например. insert into my_table values('hi, my name''s tim.');
Одиночные кавычки избегаются путем удвоения их, так же, как вы показали нам в своем примере. Следующий 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;
-- set OFF then ON again
Как насчет:
insert into my_table values('hi, my name'+char(39)+'s tim.')
Удвоение цитаты должно было сработать, поэтому странно, что оно не сработало для вас; однако альтернативой является использование двойных кавычек вместо одинарных символов в строке. т.е.,
insert into my_table values("hi, my name's tim."
);
Также следует обратить внимание на то, действительно ли он хранится как классический ASCII ‘(ASCII 27) или Unicode 2019 (который выглядит аналогично, но не одинаково).
Это не имеет большого значения для вставок, но это может означать мир выбора и обновления.
Если это значение в юникоде, то экранирование ‘в предложении WHERE (например, где blah =’ Workers»s Comp ‘) вернет, что искомого значения не существует, если’ в «Worker’s Comp» на самом деле значение Юникода.
Если ваше клиентское приложение поддерживает ввод с произвольным ключом, а также копирование и вставку на основе ввода, это может быть Unicode в одних строках и ASCII в других!
Простой способ подтвердить это — выполнить какой-то открытый запрос, который вернет искомое значение, а затем скопировать и вставить его в notepad ++ или другой редактор, поддерживающий юникод.
Различный вид между значением ascii и значением unicode должен быть очевиден для глаз, но если вы склонитесь к анальному, в шестнадцатеричном редакторе он будет отображаться как 27 (ascii) или 92 (unicode).
2 способа обойти это:
за '
Вы можете просто удвоить его в строке, например,
select 'I''m happpy' -- will get: I'm happy
Для любого персонажа, в котором вы не уверены: на сервере sql вы можете получить юникод любого символа с помощью select unicode(':')
Так что в этом случае вы также можете select 'I'+nchar(39)+'m happpy'
Это должно работать
DECLARE @singleQuote CHAR
SET @singleQuote = CHAR(39)
insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
Я согласен с Кори Ларсоном. Когда я использую SQL Server 2005 Я использую одиночную кавычку, чтобы избежать одиночной кавычки. Это звучит странно, но это работает для меня. Попробуй с этим.