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

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

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

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

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

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

19.10.2009 01:18:22
«это бросило мне некоторые ошибки» - что это были за ошибки?
llamaoo7 19.10.2009 01:24:26
Да, потому что правильный способ вставить одинарные кавычки в MSSQL - это удвоить их. Пример, который вы показываете нам, должен работать. Как сделать этот SQL-запрос, на каком языке? Или это в SQL Server Management Studio?
MaxiWheat 19.10.2009 01:32:07
Peter Mortensen 25.01.2016 14:52:03
11 ОТВЕТОВ
РЕШЕНИЕ

Одиночные кавычки можно избежать, удвоив их , как вы показали нам в своем примере. Следующий 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.
1360
21.01.2014 13:52:05
я искал не в том месте, чтобы решить мою проблему. в конце концов, это была не проблема побега персонажа. моя проблема заключалась в том, что длина данных была превышена. спасибо, что заверили меня, что двойная кавычка - это правильный способ избежать персонажа.
tim_wonil 19.10.2009 01:41:39
Итак, если у меня есть текст, содержащий 10 тыс. Слов, необходимо будет заменить весь мой текст?
Vinicius Lima 14.02.2014 22:26:07
@ViniciusLima: краткий ответ - да. Это может измениться в зависимости от технологии, которую вы собираетесь использовать для хранения данных. Если вы используете ORM, он сделает это за вас. Если вы создаете свои команды SQL вручную, вы захотите использовать функциональность языка «подготовленные операторы». Если вы делаете это в Management Studio, то вам придется сделать замену.
Cᴏʀʏ 15.02.2014 16:44:35
т.е. две одинарные кавычки для одного. [''] => [']
Ujjwal Singh 28.04.2014 12:32:58

Как насчет:

insert into my_table values('hi, my name'+char(39)+'s tim.')
47
27.06.2016 04:27:48
используйте вместо этого char (39)
Iswanto San 27.01.2013 07:12:44

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

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

17
19.10.2009 01:33:44
Что если текст содержит как одинарные, так и двойные кавычки? Кроме того, не зарезервированы ли двойные кавычки только для имен полей?
Lajos Meszaros 28.11.2017 11:07:42

Если экранирование одной цитаты с другой одинарной кавычкой не работает для вас (как это было для одного из моих последних 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
65
18.03.2014 17:11:23
Обычно я использую метод удвоения, но когда я генерировал динамический SQL, который затем запускался на нескольких серверах и базах данных, это решение работало для меня, тогда как удвоение не было в одном конкретном случае. Спасибо за это!
Richard Moss 2.07.2015 12:12:45
Будьте внимательны при обращении к представлениям и индексам в вычисляемых столбцах, иначе вы можете получить ошибку. stackoverflow.com/questions/9235527/…
datagod 9.03.2017 15:52:13
@RichardMoss, +1. тот же сценарий с вами. Удвоенный подход является исходным решением. Для сложных запросов, таких как динамический SQL на нескольких серверах, это будет работать, дублирование может не
Edgar Allan Bayron 20.12.2017 14:17:57

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

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

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

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

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

6
1.09.2015 21:45:34

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

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

insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
0
4.11.2016 20:41:59

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


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


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

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

11
15.01.2020 22:50:28

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

"UPDATE my_table SET row =\"hi, my name's tim.\";
-1
24.05.2019 11:11:25
Что вы имеете в виду? Вы говорите, что PRINT \"hi, my name's tim.\";собираетесь работать в SSMS? Это не работает вообще, и никто никогда не говорил, что это работает.
Mohammad Musavi 19.12.2019 10:13:27
Никогда не сработает.
Santosh Jadi 10.01.2020 05:39:27

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

Пример: когда у вас есть поле как, я в порядке . Вы можете сделать: ОБНОВИТЬ my_table SET row = 'Я в порядке.';

0
24.06.2019 21:33:30
Разве это не то, что сделал ОП, и то же самое, что уже сказано в ответе с наибольшим количеством голосов? Предположительно, должен быть какой-то другой источник ошибки.
Michael MacAskill 24.06.2019 22:00:45

Следующий синтаксис избавит вас от ТОЛЬКО ОДНОЙ кавычки:

SELECT ''''

Результатом будет одинарная кавычка. Может быть очень полезно для создания динамического SQL :). введите описание изображения здесь

0
24.09.2019 15:16:46

Многие из нас знают, что популярный метод избежания одиночных кавычек заключается в их удвоении, как показано ниже.

PRINT 'It''s me, Arul.';

Удвоение метода одинарных кавычек

мы рассмотрим некоторые другие альтернативные способы избежать одиночных кавычек.

1.Юникод

39 - UNICODE-символ одинарной кавычки. Таким образом, мы можем использовать это как ниже.

PRINT 'Hi,it'+CHAR(39)+'s Arul.';
PRINT 'Helo,it'+NCHAR(39)+'s Arul.';

Символы Юникода

2.QUOTED_IDENTIFIER

Другое простое и лучшее альтернативное решение - использовать QUOTED_IDENTIFIER. Когда QUOTED_IDENTIFIER установлен в OFF, строки могут быть заключены в двойные кавычки. В этом сценарии нам не нужно избегать одинарных кавычек. Таким образом, этот способ был бы очень полезен при использовании большого количества строковых значений в одинарных кавычках. Это будет очень полезно при использовании большого количества строк сценариев INSERT / UPDATE, где значения столбцов имеют одинарные кавычки.

SET QUOTED_IDENTIFIER OFF;
PRINT "It's Arul."
SET QUOTED_IDENTIFIER ON;

QUOTE_IDENTIFIER

ВЫВОД

Вышеупомянутые методы применимы как к AZURE, так и к помещениям.

4
31.10.2019 04:30:16