Как обрабатывать - сбрасывать одиночные и двойные кавычки в инструкции SQL-Update

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

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

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

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

Итак, как мне обрабатывать - как одиночные, так и двойные кавычки в инструкции SQL-Update.

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

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

Ответ 1

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

"I asked my son teacher, \"How is my son doing now?\""

Ответ 2

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

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

Печать

How is my son school helping him learn? "Not as good as Qaru would!"

Ответ 3

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

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

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

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

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

"UPDATE Table SET columnname = '" & REPLACE(@wstring, '"', '""') & "' where ... blah ... blah "

Ответ 4

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

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

Ответ 5

Используйте "ЗАМЕНИТЬ", чтобы удалить специальные символы.

REPLACE(ColumnName ,' " ','')

Пример: -

- Запрос ---

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

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

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

VI'RA "NJA"

Ответ 6

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

Ответ 7

Я решил аналогичную проблему, сначала импортировав текст в электронную таблицу Excel, а затем с помощью функции замены заменить одинарные и двойные кавычки, как того требует SQL Server, например. ЗАМЕНА (ЗАМЕНА (A1, "'", "' '"), "" "", "\" "")

В моем случае у меня было много строк (каждая строка данных должна быть очищена, а затем вставлена), и электронная таблица автоматически генерировала запросы на вставку текста после замены, например. = "INSERT INTO [dbo]. [Tablename] ([textcolumn]) VALUES ('" & ЗАМЕНА (ЗАМЕНА (A1, "'", "''"), "" "", "\" "") & "')"

Надеюсь, это поможет.