web-dev-qa-db-fra.com

Comment gérer-échapper les guillemets simples et doubles dans une instruction SQL-Update

J'ai cet exemple de requête T-SQL et l'essayer sur 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

Je sais que la requête ci-dessus va jeter une erreur. 

Alors, comment puis-je gérer-échapper les guillemets simples et doubles dans une instruction SQL-Update.

Ne suggérez pas d’ajouter manuellement une "barre oblique" ou une citation unique avant chaque citation et de manière similaire pour "bouble-quote". 

Cela serait peu pratique, car l'exemple ci-dessus n'est qu'un exemple et que la valeur réelle de l'application est supérieure à 1 000 caractères, qui seraient reçus d'une autre source système.

16
MukeshAnAlsoRan

Vous pouvez échapper aux citations avec une barre oblique inverse:

"I asked my son's teacher, \"How is my son doing now?\""
18
Russell Zahniser

Utilisez deux guillemets simples pour les échapper dans l'instruction SQL. Les guillemets doubles ne devraient pas être un problème:

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

Impression:

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

10
mclark1129

Selon la langue dans laquelle vous programmez, vous pouvez utiliser une fonction pour remplacer les guillemets doubles par deux guillemets.

Par exemple, dans PHP, cela serait:

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

Si vous essayez de faire cela en utilisant uniquement SQL, peut-être que REPLACE () est ce que vous recherchez.

Donc, votre requête ressemblerait à quelque chose comme ça:

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

Lorsque SET QUOTED_IDENTIFIER est désactivé, les chaînes littérales d'expressions peuvent être délimitées par des guillemets simples ou doubles. 

Si une chaîne littérale est délimitée par des guillemets doubles, elle peut contenir des guillemets simples incorporés, tels que des apostrophes.

1
tomf

Utilisez "REPLACE" pour supprimer les caractères spéciaux.

REPLACE(ColumnName ,' " ','')

Ex: - 

- Query ---

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

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

--Résultat---

VI'RA "" NJA "

1

En C # et VB, l’objet SqlCommand implémente la méthode Parameter.AddWithValue, qui gère. 

0
user2145584