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

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

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

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

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

Как насчет:

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

Ответ 4

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

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

Ответ 5

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


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


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

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

Ответ 6

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
























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
















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

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

Ответ 7

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

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

Ответ 8

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

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

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

Ответ 9

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

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

Ответ 10

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

SELECT ''''

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

Ответ 11

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

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

Ответ 12

string value = "Abhishek's";

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