Как обрабатывать экранирование одинарных и двойных кавычек в операторе SQL-Update - PullRequest
20 голосов
/ 19 января 2012

У меня есть этот пример запроса T-SQL, и я пытаюсь выполнить его на SQL-Server-2008.

DECLARE nvarchar(1000) @wstring = "I asked my son's teacher, "How is my son doing now?"" 

UPDATE tablename SET columnname = ' " & @wstring & " ' where ... blah ... blah

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

Итак, как мне обрабатывать экранирование одинарных и двойных кавычек в операторе SQL-Update.

Пожалуйста, не предлагайте вручную добавлять «косую черту» или одинарные кавычки перед каждымцитата и аналог для двойной цитаты.

Это было бы непрактично, поскольку приведенный выше пример является просто sAmple, а фактическое значение приложения составляет более 1000 символов, которые будут получены из какого-либо другого системного источника.

Ответы [ 6 ]

21 голосов
/ 19 января 2012

Вы можете избежать кавычек с обратной косой чертой:

"I asked my son's teacher, \"How is my son doing now?\""
12 голосов
/ 19 января 2012

Используйте две одинарные кавычки, чтобы избежать их в выражении sql. Двойные кавычки не должны быть проблемой:

SELECT 'How is my son''s school helping him learn?  "Not as good as Stack Overflow would!"'

Печать:

How is my son's school helping him learn? "Not as good as Stack Overflow would!"

4 голосов
/ 27 января 2014

В зависимости от того, на каком языке вы программируете, вы можете использовать функцию для замены двойных кавычек двумя двойными кавычками.

Например, в PHP это будет:

str_replace('"', '""', $string);

Есливы пытаетесь сделать это, используя только SQL, возможно, REPLACE () - это то, что вы ищете.

Таким образом, ваш запрос будет выглядеть примерно так:

"UPDATE Table SET columnname = '" & REPLACE(@wstring, '"', '""') & "' where ... blah ... blah "
1 голос
/ 06 ноября 2015

Когда SET QUOTED_IDENTIFIER выключен, буквенные строки в выражениях могут быть разделены одинарными или двойными кавычками.

Если литеральная строка отделяется двойными кавычками, строка может содержать встроенные одинарные кавычки, например апострофы.

1 голос
/ 29 мая 2014

Используйте «REPLACE» для удаления специальных символов.

REPLACE(ColumnName ,' " ','')

Пример: -

- Запрос ---

DECLARE @STRING AS VARCHAR(100)
SET @STRING ='VI''RA""NJA "'

SELECT @STRING 
SELECT REPLACE(REPLACE(@STRING,'''',''),'"','') AS MY_NAME

- Результат---

VI'RA "" NJA "

0 голосов
/ 18 апреля 2013

В C # и VB объект SqlCommand реализует метод Parameter.AddWithValue, который обрабатывает эту ситуацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...