J'essaie de insert
quelques données texte dans un tableau en SQL Server
9.
Le texte comprend une seule citation (').
Comment puis-je y échapper?
J'ai essayé d'utiliser deux guillemets simples, mais cela m'a jeté quelques erreurs.
par exemple. insert into my_table values('hi, my name''s tim.');
sql
sql-server
tsql
delimiter
single-quotes
tim_wonil
la source
la source
Réponses:
Les guillemets simples sont échappés en les doublant , comme vous nous l'avez montré dans votre exemple. Le SQL suivant illustre cette fonctionnalité. Je l'ai testé sur SQL Server 2008:
Résultats
la source
Si échapper votre devis unique avec un autre devis unique ne fonctionne pas pour vous (comme cela n'a pas été le cas pour l'une de mes
REPLACE()
requêtes récentes ), vous pouvez l'utiliserSET QUOTED_IDENTIFIER OFF
avant votre requête, puisSET QUOTED_IDENTIFIER ON
après votre requête.Par exemple
la source
Que diriez-vous:
la source
Le doublement de la citation aurait dû fonctionner, il est donc particulier que cela n'a pas fonctionné pour vous; cependant, une alternative consiste à utiliser des guillemets doubles, au lieu de simples, autour de la chaîne. C'est à dire,
insert into my_table values("hi, my name's tim."
);la source
2 façons de contourner cela:
car
'
vous pouvez simplement le doubler dans la chaîne, par exempleselect 'I''m happpy'
- obtiendra:I'm happy
Pour tout caractère dont vous n'êtes pas sûr: dans le serveur sql, vous pouvez obtenir l'unicode de n'importe quel caractère par
select unicode(':')
(vous gardez le numéro)Donc, ce cas, vous pouvez également
select 'I'+nchar(39)+'m happpy'
la source
Une autre chose à laquelle il faut faire attention est de savoir s'il est vraiment stocké en tant que ASCII classique (ASCII 27) ou Unicode 2019 (qui ressemble, mais pas le même).
Ce n'est pas un gros problème sur les insertions, mais cela peut signifier le monde sur les sélections et les mises à jour.
Si c'est la valeur unicode, l'échappement de la clause 'dans une clause WHERE (par exemple, où blah =' Workers 'Comp') retournera comme si la valeur que vous recherchez n'est pas là si le 'dans "Worker's Comp" est en fait le valeur unicode.
Si votre application cliente prend en charge les clés libres, ainsi que les entrées basées sur le copier-coller, il peut s'agir d'Unicode dans certaines lignes et d'ASCII dans d'autres!
Un moyen simple de confirmer cela est de faire une sorte de requête ouverte qui ramènera la valeur que vous recherchez, puis copiez et collez cela dans notepad ++ ou dans un autre éditeur prenant en charge Unicode.
L'apparence différente entre la valeur ascii et celle unicode devrait être évidente pour les yeux, mais si vous vous penchez vers l'anale, elle apparaîtra comme 27 (ascii) ou 92 (unicode) dans un éditeur hexadécimal.
la source
Beaucoup d'entre nous savent que la méthode populaire pour échapper aux guillemets simples consiste à les doubler facilement comme ci-dessous.
nous allons examiner d'autres façons alternatives d'échapper aux guillemets simples.
1. Caractères UNICODE
39 est le caractère UNICODE du guillemet simple. Nous pouvons donc l'utiliser comme ci-dessous.
2.QUOTED_IDENTIFIER
Une autre solution alternative simple et meilleure consiste à utiliser QUOTED_IDENTIFIER. Lorsque QUOTED_IDENTIFIER est défini sur OFF, les chaînes peuvent être placées entre guillemets. Dans ce scénario, nous n'avons pas besoin d'échapper aux guillemets simples. Ainsi, cette méthode serait très utile lors de l'utilisation de nombreuses valeurs de chaîne avec des guillemets simples. Il sera très utile d'utiliser autant de lignes de scripts INSERT / UPDATE où les valeurs de colonne ont des guillemets simples.
CONCLUSION
Les méthodes mentionnées ci-dessus sont applicables à la fois à AZURE et sur site.
la source
La syntaxe suivante vous échappera SEULEMENT UN guillemet:
Le résultat sera un devis unique. Pourrait être très utile pour créer du SQL dynamique :).
la source
Cela devrait fonctionner
la source
Insérez simplement un 'avant tout élément à insérer. Ce sera comme un caractère d'échappement dans sqlServer
Exemple: Quand vous avez un champ comme, je vais bien . vous pouvez faire: UPDATE my_table SET row = 'Je vais bien.';
la source
Cela devrait fonctionner: utilisez une barre oblique inverse et mettez un guillemet double
la source
PRINT \"hi, my name's tim.\";
va fonctionner dans SSMS? Cela ne fonctionne pas du tout et personne n'a jamais dit que cela fonctionne.