it-swarm-ru.tech

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

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

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

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

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

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

806
tim_wonil

Одиночные кавычки удаляются путем их удвоения, как вы показали нам в своем примере. Следующий 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.
1183
Cᴏʀʏ

Если экранирование вашей отдельной цитаты с помощью другой отдельной цитаты не работает для вас (как это не было для одного из моих недавних запросов 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
64
Brad Waite

Как насчет:

insert into my_table values('hi, my name'+char(39)+'s tim.')
38
PaulMcG

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

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

17
Alex Martelli

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

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

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

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

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

6
Daniel Schmidt

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


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


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

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

4
Xin

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

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

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

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

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