Ответ 1
Вы можете избежать кавычек с помощью обратной косой черты:
"I asked my son teacher, \"How is my son doing now?\""
У меня есть этот пример запроса 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 символов, которое будет получено от другого системного источника.
Вы можете избежать кавычек с помощью обратной косой черты:
"I asked my son teacher, \"How is my son doing now?\""
Используйте две одинарные кавычки, чтобы избежать их в инструкции 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!"
В зависимости от того, на каком языке вы программируете, вы можете использовать функцию для замены двойных кавычек двумя двойными кавычками.
Например, в PHP, который будет:
str_replace('"', '""', $string);
Если вы пытаетесь сделать это только с использованием SQL, возможно, REPLACE() - это то, что вы ищете.
Таким образом, ваш запрос будет выглядеть примерно так:
"UPDATE Table SET columnname = '" & REPLACE(@wstring, '"', '""') & "' where ... blah ... blah "
Когда SET QUOTED_IDENTIFIER выключен, буквальные строки в выражениях могут быть разделены одиночными или двойными кавычками.
Если литеральная строка разделяется двойными кавычками, строка может содержать встроенные одинарные кавычки, такие как апострофы.
Используйте "ЗАМЕНИТЬ", чтобы удалить специальные символы.
REPLACE(ColumnName ,' " ','')
Пример: -
- Запрос ---
DECLARE @STRING AS VARCHAR(100)
SET @STRING ='VI''RA""NJA "'
SELECT @STRING
SELECT REPLACE(REPLACE(@STRING,'''',''),'"','') AS MY_NAME
- результат ---
VI'RA "NJA"
В С# и VB объект SqlCommand реализует метод Parameter.AddWithValue, который справляется с этой ситуацией
Я решил аналогичную проблему, сначала импортировав текст в электронную таблицу Excel, а затем с помощью функции замены заменить одинарные и двойные кавычки, как того требует SQL Server, например. ЗАМЕНА (ЗАМЕНА (A1, "'", "' '"), "" "", "\" "")
В моем случае у меня было много строк (каждая строка данных должна быть очищена, а затем вставлена), и электронная таблица автоматически генерировала запросы на вставку текста после замены, например. = "INSERT INTO [dbo]. [Tablename] ([textcolumn]) VALUES ('" & ЗАМЕНА (ЗАМЕНА (A1, "'", "''"), "" "", "\" "") & "')"
Надеюсь, это поможет.