Как избежать одинарной кавычки в SQL Server?
Я пытаюсь insert некоторые текстовые данные в таблицу SQL Server 9.
текст содержит одиночную кавычку(').
как мне избежать этого?
Я попытался использовать две одинарные кавычки, но это бросило мне некоторые ошибки.
например. insert into my_table values('hi, my name''s tim.');
9 ответов:
одиночные кавычки экранируются путем их удвоения, просто, как вы показали нам в вашем примере. Следующая 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's tim.");
также следует быть осторожным в том, действительно ли он хранится как классический ASCII ' (ASCII 27) или Unicode 2019 (который выглядит похожим, но не то же самое).
это не имеет большого значения для вставок, но это может означать, что мир выбирает и обновляет.
Если это значение unicode, то экранирование 'в предложении WHERE (например, где blah = 'Workers' S Comp') вернется, как значение, которое вы ищете, не существует, если ' в "Worker's Comp" на самом деле является unicode значение.
Если ваше клиентское приложение поддерживает свободный ключ, а также копирование и вставка на основе ввода, это может быть Unicode в некоторых строках и ASCII в других!
Простой способ подтвердить это-сделать какой-то открытый запрос, который вернет значение, которое вы ищете, а затем скопируйте и вставьте его в notepad++ или какой-либо другой редактор поддержки unicode.
отличающийся внешний вид между значением ascii и unicode должен быть очевиден для глаза, но если вы наклонитесь к аналу, он будет отображаться как 27 (ascii) или 92 (unicode) в шестнадцатеричном редакторе.
2 способа обойти это:
на
'вы можете просто удвоить его в строку, напримерselect 'I''m happpy' -- will get: I'm happy
для любого символа, в котором вы не уверены: в sql server вы можете получить любой символ unicode by
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 Я использую одинарную кавычку, чтобы избежать одинарной кавычки. Это звучит странно, но это работает для меня. Попробуй с этим.
Comments