как избежать одиночной кавычки в sql server?

<p>я пытаюсь <code>insert</code> некоторые текстовые данные в таблицу в <code>sql server</code> 9.</p><p>текст включает в себя одну цитату (').</p><p>как мне избежать этого?</p><p>я попытался использовать две одинарные кавычки, но это привело меня к ошибкам.</p><p>например. <code>insert into my\_table values('hi, my name''s tim.');</code></p>

<p><strong>одиночные кавычки удаляются путем их удвоения</strong>, как вы показали нам в своем примере. следующий sql иллюстрирует эту функциональность. я проверил это на sql server 2008:</p><pre><code>declare @my\_table table ( [value] varchar(200) ) insert into @my\_table values ('hi, my name''s tim.') select * from @my\_table </code></pre><h3>результаты</h3><pre><code>value ================== hi, my name's tim. </code></pre>

<p>если экранирование вашей отдельной цитаты с помощью другой отдельной цитаты не работает для вас (как это не было для одного из моих недавних запросов <code>replace()</code>), вы можете использовать <code>set quoted\_identifier off</code> перед вашим запросом, а затем <code>set quoted\_identifier on</code> после вашего запроса.</p><p>например</p><pre><code>set quoted\_identifier off; update table set name = replace(name, "'s", "s"); set quoted\_identifier on; -- set off then on again </code></pre>

<p>как насчет:</p><pre><code>insert into my\_table values('hi, my name'+char(39)+'s tim.') </code></pre>

<p>удвоение цитаты должно было сработать, поэтому странно, что оно не сработало для вас; однако альтернативой является использование двойных кавычек вместо одинарных символов в строке. т.е.,</p><p><code>insert into my\_table values("hi, my name's tim."</code>);</p>

<p>также следует обратить внимание на то, действительно ли он хранится как классический ascii '(ascii 27) или unicode 2019 (который выглядит аналогично, но не одинаково).<br> <br> это не имеет большого значения для вставок, но это может означать мир на выбор и обновления.<br> если это значение в юникоде, то экранирование 'в предложении where (например, где blah =' workers''s comp ') вернет, как если бы искомое значение отсутствовало, если' in "worker's comp "на самом деле значение unicode.<br> <br> если ваше клиентское приложение поддерживает ввод со свободным ключом, а также ввод на основе копирования и вставки, это может быть unicode в одних строках и ascii в других!<br> <br> простой способ подтвердить это - выполнить какой-то открытый запрос, который вернет искомое значение, а затем скопировать и вставить его в notepad ++ или другой редактор, поддерживающий юникод.<br> <br> различия между значением ascii и значением unicode должны быть очевидны для глаз, но если вы склонитесь к анальному, в шестнадцатеричном редакторе оно будет отображаться как 27 (ascii) или 92 (unicode).</p>

<p><strong>2 способа обойти это:</strong></p><hr><p>для <code>'</code> вы можете просто удвоить его в строке, например, <code>select 'i''m happpy' -- will get: i'm happy</code></p><hr><p>для любого персонажа, в котором вы не уверены: на сервере sql вы можете получить юникод любого символа с помощью <code>select unicode(':')</code></p><p>так что в этом случае вы также можете <code>select 'i'+nchar(39)+'m happpy'</code></p>

<p>это должно работать</p><pre><code>declare @singlequote char set @singlequote = char(39) insert into my\_table values('hi, my name'+ @singlequote +'s tim.') </code></pre>

<p>это должно работать: использовать обратную косую черту и поставить двойную кавычку</p><pre><code>"update my\_table set row =\"hi, my name's tim.\"; </code></pre>