Вопрос

Я пытаюсь 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.");

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


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


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

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

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

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

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

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

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

Это должно работать:используйте обратную косую черту и поставьте двойную кавычку

"UPDATE my_table SET row =\"hi, my name's tim.\";

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

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

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

Просто вставьте ' перед тем, что нужно вставить.Это будет похоже на escape-символ в sqlServer.

Пример:Если у вас есть поле as, Я в порядке.ты можешь сделать:UPDATE my_table SET row ='Со мной все в порядке.';

string value = "Abhishek's";

value = Replace(value,"'","''");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top