Как избежать одной цитаты В 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'+char(39)+'s tim.')

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

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


также еще одна вещь, о которой нужно заботиться, - это действительно ли она хранится как классический ASCII ' (ASCII 27) или Unicode 2019 (который выглядит похожим, но не то же самое).

это не имеет большого значения для вставок,но это может означать, что мир выбирает и обновляет.
Если это значение unicode, то экранирование ' в предложении WHERE (e.g, где blah = 'Workers' S Comp') вернется, как значение, которое вы ищете, не существует, если " in "Worker's Comp" на самом деле является unicode значение.

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

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

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


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


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


для любого символа, в котором вы не уверены: в sql server вы можете получить любой символ Юникода по 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 Я использую одинарную кавычку, чтобы избежать одинарной кавычки. Звучит странно, но для меня это работает. Попробуй с этим.

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


string value = "Abhishek's";

value = Replace(value,"'","''");