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



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



текст содержит одиночную кавычку(').



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



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



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

1301   9  

9 ответов:

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

string value = "Abhishek's";

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

Comments

    Ничего не найдено.