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

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

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

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

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

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

686
19 окт. '09 в 4:18
источник поделиться
9 ответов

Одиночные кавычки экранируются, удваивая их, так же, как вы показали нам в вашем примере. Следующий SQL иллюстрирует эту функциональность. Я тестировал его на SQL Server 2008:

DECLARE @my_table TABLE (
    [value] VARCHAR(200)
)

INSERT INTO @my_table VALUES ('hi, my name' tim.')

SELECT * FROM @my_table

Результаты

value
==================
hi, my name tim.
1004
19 окт. '09 в 4:30
источник

Связанные вопросы


Похожие вопросы

Если вы избежите одиночной кавычки с другой отдельной цитатой, которая не работает для вас (например, она не для одного из моих последних запросов 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
54
06 сент. '13 в 2:20
источник

Как насчет:

insert into my_table values('hi, my name'+char(39)+ tim.')
32
19 окт. '09 в 4:24
источник

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

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

17
19 окт. '09 в 4:33
источник

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
























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
















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

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

4
02 сент. '15 в 0:45
источник

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


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


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

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

2
15 марта '17 в 4:41
источник

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

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

insert into my_table values('hi, my name'+ @singleQuote + tim.')
0
04 нояб. '16 в 23:41
источник

Я согласен с Кори Ларсоном. Когда я использую SQL Server 2005 Я использую одиночную кавычку, чтобы избежать одиночной кавычки. Это звучит странно, но это работает для меня. Попытайтесь с этим.

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

-4
19 окт. '09 в 9:42
источник
string value = "Abhishek's";

value = Replace(value,"'","''");
-7
18 марта '16 в 11:34
источник

Посмотрите другие вопросы по меткам или Задайте вопрос